home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / INFO / INTER39A.ZIP / INTERRUP.D < prev    next >
Text File  |  1994-02-06  |  352KB  |  9,416 lines

  1. Interrupt List, part 4 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
  3. --------D-2142-------------------------------
  4. INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
  5.     AH = 42h
  6.     AL = origin of move
  7.         00h start of file
  8.         01h current file position
  9.         02h end of file
  10.     BX = file handle
  11.     CX:DX = offset from origin of new file position
  12. Return: CF clear if successful
  13.         DX:AX = new file position in bytes from start of file
  14.     CF set on error
  15.         AX = error code (01h,06h) (see AH=59h)
  16. Notes:    for origins 01h and 02h, the pointer may be positioned before the
  17.       start of the file; no error is returned in that case, but subsequent
  18.       attempts at I/O will produce errors
  19.     if the new position is beyond the current end of file, the file will
  20.       be extended by the next write (see AH=40h)
  21. BUG:    using this method to grow a file from zero bytes to a very large size
  22.       can corrupt the FAT in some versions of DOS; the file should first
  23.       be grown from zero to one byte and then to the desired large size
  24. SeeAlso: AH=24h,INT 2F/AX=1228h
  25. --------v-214203-----------------------------
  26. INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
  27.     AX = 4203h
  28. Return: AX = 1234h if resident
  29. SeeAlso: AX=3DFFh,AX=4243h
  30. --------v-214243-----------------------------
  31. INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
  32.     AX = 4243h
  33. Return: AX = 5678h if resident
  34. SeeAlso: AX=4203h,AX=4B04h
  35. --------D-214300-----------------------------
  36. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  37.     AX = 4300h
  38.     DS:DX -> ASCIZ filename
  39. Return: CF clear if successful
  40.         CX = file attributes (see AX=4301h)
  41.         AX = CX (DR-DOS 5.0)
  42.     CF set on error
  43.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  44. Notes:    under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  45.     under DR-DOS 3.41 and 5.0, attempts to change the subdirectory bit are
  46.       simply ignored without an error
  47. SeeAlso: AX=4301h,AX=4310h,AH=71h,AH=B6h,INT 2F/AX=110Fh
  48. --------D-214301-----------------------------
  49. INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
  50.     AX = 4301h
  51.     CX = new file attributes (see below)
  52.     DS:DX -> ASCIZ filename
  53. Return: CF clear if successful
  54.         AX destroyed
  55.     CF set on error
  56.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  57. Notes:    will not change volume label or directory attribute bits, but will
  58.       change the other attribute bits of a directory (the directory
  59.       bit must be cleared to successfully change the other attributes of a
  60.       directory, but the directory will not be changed to a normal file as
  61.       a result)
  62.     MS-DOS 4.01 reportedly closes the file if it is currently open
  63.     for security reasons, the Novell NetWare execute-only bit can never
  64.       be cleared; the file must be deleted and recreated
  65.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  66.     DOS 5.0 SHARE will close the file if it is currently open in sharing-
  67.       compatibility mode, otherwise a sharing violation critical error is
  68.       generated if the file is currently open
  69. SeeAlso: AX=4300h,AX=4311h,AH=71h,INT 2F/AX=110Eh
  70.  
  71. Bitfields for file attributes:
  72.  bit 7    shareable (Novell NetWare)
  73.  bit 6    unused
  74.  bit 5    archive
  75.  bit 4    directory
  76.  bit 3    volume label
  77.     execute-only (Novell NetWare)
  78.  bit 2    system
  79.  bit 1    hidden
  80.  bit 0    read-only
  81. --------D-214302-----------------------------
  82. INT 21 - DOS 7 (Chicago) - GET VOLUME INFORMATION
  83.     AX = 4302h
  84.     details not yet available
  85. SeeAlso: AH=71h,AH=72h
  86. --------O-214302-----------------------------
  87. INT 21 - DR-DOS 3.41+ internal - GET ACCESS RIGHTS
  88.     AX = 4302h
  89.     DS:DX -> ASCIZ pathname
  90. Return: CF clear if successful
  91.         CX = access rights (see below)
  92.         AX = CX (DR-DOS 5.0)
  93.     CF set on error
  94.         AX = error code
  95. Desc:    Determine which operations the calling program may perform on a
  96.       specified file without being required to provide a password.
  97. Notes:    this protection scheme has been coordinated on all current Digital
  98.       Research/Novell operating systems (DR-DOS 3.41+, DRMDOS 5.x, and
  99.       FlexOS 2+)
  100.     this function is documented in DR-DOS 6.0 and corresponds to the
  101.       "Get/Set File Attributes" function, subfunction 2, documented in
  102.       Concurrent DOS.
  103.     only FlexOS actually uses the "execution" bits; DR-DOS 3.41+ treats
  104.       them as "read" bits.
  105.     DR-DOS 3.41-5.x only use bits 0-3.  Only DR-DOS 6.0 using a
  106.       DRMDOS 5.x security system allowing for users and groups uses bits
  107.       4-11.
  108. SeeAlso: AX=4303h
  109.  
  110. Bitfields for access rights:
  111.  bit 0    owner delete requires password
  112.  bit 1    owner execution requires password (FlexOS)
  113.  bit 2    owner write requires password
  114.  bit 3    owner read requires password
  115.  bit 4    group delete requires password
  116.  bit 5    group execution requires password (FlexOS)
  117.  bit 6    group write requires password
  118.  bit 7    group read requires password
  119.  bit 8    world delete requires password
  120.  bit 9    world execution requires password (FlexOS)
  121.  bit 10 world write requires password
  122.  bit 11 world read requires password
  123. --------O-214303-----------------------------
  124. INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
  125.     AX = 4303h
  126.     CX = access rights
  127.          bits 11-0: access rights (see AX=4302h"DR-DOS")
  128.          bit 15: new password is to be set
  129.     DS:DX -> ASCIZ pathname
  130.     [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
  131. Return: CF clear if successful
  132.     CF set on error
  133.         AX = error code
  134. Notes:    if the file is already protected, the old password must be added after
  135.       the pathname, separated by a ";"
  136.     this function is documented in DR-DOS 6.0 and corresponds to the
  137.       "Get/Set File Attributes" function, subfunction 3, documented in
  138.       Concurrent DOS.
  139. SeeAlso: AH=0Fh,AH=17h,AX=4302h"DR-DOS",AX=4305h,AX=4454h
  140. --------O-214304-----------------------------
  141. INT 21 U - DR-DOS 5.0-6.0 internal - GET ENCRYPTED PASSWORD
  142.     AX = 4304h
  143.     DS:DX -> ASCIZ filename
  144.     ???
  145. Return: CF clear if successful
  146.         CX = AX = 0000h if no password assigned to file
  147.     CF set on error
  148.         AX = error code (see AH=59h)
  149. Note:    this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1
  150. SeeAlso: AX=4303h,AX=4305h
  151. --------O-214305-----------------------------
  152. INT 21 U - DR-DOS 5.0-6.0 internal - SET EXTENDED FILE ATTRIBUTES
  153.     AX = 4305h
  154.     DS:DX -> ASCIZ filename
  155.     ???
  156. Return: CF clear if successful
  157.     CF set on error
  158.         AX = error code (see AH=59h)
  159. Desc:    this function allows the extended attributes, and optionally the
  160.       encrypted password, of a file to be set.
  161. Note:    this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1
  162. SeeAlso: AX=4304h,AX=4311h
  163. --------O-214306-----------------------------
  164. INT 21 - DR-DOS 6.0 - GET FILE OWNER
  165.     AX = 4306h
  166.     DS:DX -> ASCIZ filename
  167. Return: CF clear if successful
  168.         AX = CX = value set with AX=4307h
  169.     CF set on error
  170.         AX = error code (see AH=59h)
  171. SeeAlso: AX=4307h
  172. --------O-214307-----------------------------
  173. INT 21 - DR-DOS 6.0 - SET FILE OWNER
  174.     AX = 4307h
  175.     CX = ??? (owner identification number?)
  176.     DS:DX -> ASCIZ filename
  177. Return: CF clear if successful
  178.     CF set on error
  179.         AX = error code (see AH=59h)
  180. SeeAlso: AX=4306h
  181. --------N-214310-----------------------------
  182. INT 21 - Banyan VINES 2.1+ - GET EXTENDED FILE ATTRIBUTES
  183.     AX = 4310h
  184.     DS:DX -> ASCIZ filename
  185. Return: CF clear if successful
  186.         CH = attributes (see AX=4311h)
  187.     CF set on error
  188.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  189. Note:    the filename may be a directory but must be on a VINES file service
  190. SeeAlso: AX=4300h,AX=4311h,AH=B6h,INT 2F/AX=110Fh
  191. --------N-214311-----------------------------
  192. INT 21 - Banyan VINES 2.1+ - SET EXTENDED FILE ATTRIBUTES
  193.     AX = 4311h
  194.     CH = new attributes
  195.         bit 7: unused
  196.         bit 6: shareable
  197.         bit 5: execute-only
  198.         bits 4-0: unused
  199.     DS:DX -> ASCIZ filename
  200. Return: CF clear if successful
  201.     CF set on error
  202.         AX = error code (01h,02h,03h,05h) (see AH=59h)
  203. Note:    the filename may be a directory but must be on a VINES file service
  204. SeeAlso: AX=4301h,AX=4305h,AX=4310h,INT 2F/AX=110Eh
  205. --------O-214380-----------------------------
  206. INT 21 - Novell DOS 7 - UNDELETE PENDING DELETE FILE
  207.     AX = 4380h
  208.     ???
  209. Return: ???
  210. SeeAlso: AH=41h,AX=4381h
  211. --------O-214381-----------------------------
  212. INT 21 - Novell DOS 7 - PURGE PENDING DELETE FILE
  213.     AX = 4381h
  214.     ???
  215. Return: ???
  216. SeeAlso: AH=41h,AX=4380h
  217. --------D-214400-----------------------------
  218. INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
  219.     AX = 4400h
  220.     BX = handle
  221. Return: CF clear if successful
  222.         DX = device information word (see below)
  223.         AX destroyed
  224.     CF set on error
  225.         AX = error code (01h,05h,06h) (see AH=59h)
  226. Notes:    value in DH corresponds to high byte of device driver's attribute word
  227.       if handle refers to a character device
  228.     Novell NetWare reportedly does not return a drive number in bits 5-0
  229.       for a disk file
  230. SeeAlso: AX=4401h,INT 2F/AX=122Bh
  231.  
  232. Bitfields for device information word:
  233.  character device
  234.   bit 14: device driver can process IOCTL requests (see AX=4402h)
  235.   bit 13: output until busy supported
  236.   bit 11: driver supports OPEN/CLOSE calls
  237.   bit  7: set (indicates device)
  238.   bit  6: EOF on input
  239.   bit  5: raw (binary) mode
  240.   bit  4: device is special (uses INT 29)
  241.   bit  3: clock device
  242.   bit  2: NUL device
  243.   bit  1: standard output
  244.   bit  0: standard input
  245.  disk file
  246.   bit 15: file is remote (DOS 3+)
  247.   bit 14: don't set file date/time on closing (DOS 3+)
  248.   bit 11: media not removable
  249.   bit  8: (DOS 4 only) generate INT 24 if no disk space on write or read past
  250.         end of file
  251.   bit  7: clear (indicates file)
  252.   bit  6: file has not been written
  253.   bits 5-0: drive number (0 = A:)
  254. --------D-214401-----------------------------
  255. INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
  256.     AX = 4401h
  257.     BX = handle (must refer to character device)
  258.     DX = device information word (see AX=4400h)
  259.         (DH must be zero)
  260. Return: CF clear if successful
  261.     CF set on error
  262.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  263. SeeAlso: AX=4400h,INT 2F/AX=122Bh
  264. --------D-214402-----------------------------
  265. INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
  266.     AX = 4402h
  267.     BX = file handle referencing character device
  268.     CX = number of bytes to read
  269.     DS:DX -> buffer
  270. Return: CF clear if successful
  271.         AX = number of bytes actually read
  272.     CF set on error
  273.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  274. Note:    format of data is driver-specific (see below for some specific cases)
  275. SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh
  276. --------N-214402-----------------------------
  277. INT 21 - Network Driver Interface Specification (NDIS) 2.0.1 - PROTOCOL MANAGER
  278.     AX = 4402h
  279.     BX = file handle for device "PROTMAN$"
  280.     CX = 000Eh (size of request block)
  281.     DS:DX -> request block (see below)
  282. Return: CF clear if successful
  283.         AX = number of bytes actually read
  284.     CF set on error
  285.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  286. SeeAlso: AX=4402h"FTPSOFT"
  287.  
  288. Format of request block for GetProtocolManagerInfo:
  289. Offset    Size    Description
  290.  00h    WORD    01h
  291.  02h    WORD    returned status (see below)
  292.  04h    DWORD    returned pointer to structure representing parsed user config
  293.  08h    DWORD    unused
  294.  0Ch    WORD    returned BCD version of NDIS on which Protocol Manager is based
  295.  
  296. Format of request block for RegisterModule:
  297. Offset    Size    Description
  298.  00h    WORD    02h
  299.  02h    WORD    returned status (see below)
  300.  04h    DWORD    pointer to module's common characteristics table (see below)
  301.  08h    DWORD    pointer to list of modules to which the module is to be bound
  302.  0Ch    WORD    unused
  303.  
  304. Format of request block for BindAndStart:
  305. Offset    Size    Description
  306.  00h    WORD    03h
  307.  02h    WORD    returned status (see below)
  308.  04h    DWORD    caller's virtual address in FailingModules structure
  309.  08h    DWORD    unused
  310.  0Ch    WORD    unused
  311.  
  312. Format of request block for GetProtocolManagerLinkage:
  313. Offset    Size    Description
  314.  00h    WORD    04h
  315.  02h    WORD    returned status (see below)
  316.  04h    DWORD    returned dispatch point
  317.  08h    DWORD    unused
  318.  0Ch    WORD    returned protocol manager DS
  319. Note:    the dispatch point may be called as follows instead of using this IOCTL
  320.     STACK: WORD  protocol manager DS
  321.            DWORD pointer to request block
  322.     Return: AX = returned status
  323.         STACK popped
  324.  
  325. Format of request block for GetProtocolIniPath:
  326. Offset    Size    Description
  327.  00h    WORD    05h
  328.  02h    WORD    returned status (see below)
  329.  04h    DWORD    pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
  330.  08h    DWORD    unused
  331.  0Ch    WORD    buffer length
  332.  
  333. Format of request block for RegisterProtocolManagerInfo:
  334. Offset    Size    Description
  335.  00h    WORD    06h
  336.  02h    WORD    returned status (see below)
  337.  04h    DWORD    pointer to structure containing parsed user config file
  338.  08h    DWORD    unused
  339.  0Ch    WORD    length of structure
  340.  
  341. Format of request block for InitAndRegister:
  342. Offset    Size    Description
  343.  00h    WORD    07h
  344.  02h    WORD    returned status (see below)
  345.  04h    DWORD    unused
  346.  08h    DWORD    poitner to ASCIZ name of the module to be prebind initialized
  347.  0Ch    WORD    unused
  348.  
  349. Format of request block for UnbindAndStop:
  350. Offset    Size    Description
  351.  00h    WORD    08h
  352.  02h    WORD    returned status (see below)
  353.  04h    DWORD    failing modules as for BindAndStart
  354.  08h    DWORD    if not 0000h:0000h, pointer to ASCIZ name of module to unbind
  355.         if 0000h:0000h, terminate a set of previously dynamically
  356.           bound protocol modules
  357.  0Ch    WORD    unused
  358.  
  359. Format of request block for BindStatus:
  360. Offset    Size    Description
  361.  00h    WORD    09h
  362.  02h    WORD    returned status (see below)
  363.  04h    DWORD    must be 0000h:0000h
  364.         on return, points to root tree
  365.  08h    DWORD    0000h:0000h
  366.  0Ch    WORD    unused under DOS
  367.  
  368. Format of request block for RegisterStatus:
  369. Offset    Size    Description
  370.  00h    WORD    0Ah
  371.  02h    WORD    returned status (0000h, 0008h, 002Ch) (see below)
  372.  04h    DWORD    0000h:0000h
  373.  08h    DWORD    pointer to 16-byte ASCIZ module name
  374.  0Ch    WORD    0000h
  375. Note:    not supported by the 10NET v5.0 PROTMAN$ driver
  376.  
  377. Values for status code:
  378.  0000h    success
  379.  0001h    wait for release--protocol has retained control of the data buffer
  380.  0002h    request queued
  381.  0003h    frame not recognized
  382.  0004h    frame rejected
  383.  0005h    frame should be forwarded
  384.  0006h    out of resource
  385.  0007h    invalid parameter
  386.  0008h    invalid function
  387.  0009h    not supported
  388.  000Ah    hardware error
  389.  000Bh    transmit error
  390.  000Ch    unrecognized destination
  391.  000Dh    buffer too small
  392.  0020h    already started
  393.  0021h    binding incomplete
  394.  0022h    driver not initialized
  395.  0023h    hardware not found
  396.  0024h    hardware failure
  397.  0025h    configuration failure
  398.  0026h    interrupt conflict
  399.  0027h    MAC incompatible
  400.  0028h    initialization failed
  401.  0029h    no binding
  402.  002Ah    network may be disconnected
  403.  002Bh    incompatible OS version
  404.  002Ch    already registered
  405.  002Dh    path not found
  406.  002Eh    insufficient memory
  407.  002Fh    info not found
  408.  00FFh    general failure
  409.  F000h-FFFFh reserved for vendor-specific codes, treated as general failure
  410.  
  411. Format of common characteristics table:
  412. Offset    Size    Description
  413.  00h    WORD    size of table in bytes
  414.  02h    BYTE    NDIS major version
  415.  03h    BYTE    NDIS minor version
  416.  04h    WORD    reserved
  417.  06h    BYTE    module major version
  418.  07h    BYTE    module minor version
  419.  08h    DWORD    module function flag bits
  420.         bit 0: binding at upper boundary supported
  421.         bit 1: binding at lower boundary supported
  422.         bit 2: dynamically bound
  423.         bits 3-31 reserved, must be 0
  424.  0Ch 16 BYTEs    ASCIZ module name
  425.  1Ch    BYTE    upper boundary protocol level (see below)
  426.  1Dh    BYTE    upper boundary interface type
  427.         for MACs: 1 = MAC
  428.         for data links and transports: to be defined
  429.         for session: 1 = NCB
  430.         any level: 0 = private (ISV-defined)
  431.  1Eh    BYTE    lower boundary protocol level (see below)
  432.  1Fh    BYTE    lower boundary interface type
  433.         same as offset 1Dh
  434.  20h    WORD    module ID filled in by protocol manager
  435.  22h    WORD    module DS
  436.  24h    DWORD    system request entry point
  437.  28h    DWORD    pointer to service-specific characteristics
  438.         0000h:0000h if none
  439.  2Ch    DWORD    pointer to service-specific status, or 0000h:0000h if none
  440.  30h    DWORD    pointer to upper dispatch table (see below)
  441.         0000h:0000h if none
  442.  34h    DWORD    pointer to lower dispatch table (see below)
  443.         0000h:0000h if none
  444.  38h  2 DWORDs    reserved, must be 0
  445. Note:    for compatibility with NDIS 1.x.x, a major version of 00h is
  446.       interpreted as 01h
  447.  
  448. Values for boundary protocol level:
  449.  00h    physical
  450.  01h    Media Access Control
  451.  02h    Data link
  452.  03h    network
  453.  04h    transport
  454.  05h    session
  455.  FFh    not specified
  456.  
  457. Format of dispatch table:
  458. Offset    Size    Description
  459.  00h    DWORD    -> common characteristics table (see above)
  460.  04h  4 BYTEs    ???
  461.  08h    DWORD    -> ??? function (called with 12 bytes of stack arguments)
  462.  0Ch    DWORD    -> ??? function (called with 10 bytes of stack arguments)
  463.  10h    DWORD    -> ??? function (called with 16 bytes of stack arguments)
  464.  14h    DWORD    -> ??? function (called with 4 bytes of stack arguments)
  465.  18h    DWORD    -> ??? function (called with 18 bytes of stack arguments)
  466.  1Ch    DWORD    -> ??? function (called with 12 bytes of stack arguments)
  467.  
  468. Format of MAC Service-Specific Characteristics Table:
  469. Offset    Size    Description
  470.  00h    WORD    length of table in bytes
  471.  02h 16 BYTEs    ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
  472.         "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
  473.         "HDLC", or "ISDN"
  474.  12h    WORD    length of station addresses in bytes
  475.  14h 16 BYTEs    permanent station address
  476.  24h 16 BYTEs    current station address
  477.  34h    DWORD    current functional adapter address (00000000h if none)
  478.  38h    DWORD    pointer to multicast address list
  479.  3Ch    DWORD    link speed in bits/sec
  480.  40h    DWORD    service flags (see below)
  481.  44h    WORD    maximum frame size which may be both sent and received
  482.  46h    DWORD    total transmit buffer capacity in bytes
  483.  4Ah    WORD    transmit buffer allocation block size in bytes
  484.  4Ch    DWORD    total receive buffer capacity in bytes
  485.  50h    WORD    receive buffer allocation block size in bytes
  486.  52h  3 BYTEs    IEEE vendor code
  487.  55h    BYTE    vendor adapter code
  488.  56h    DWORD    pointer to ASCIZ vendor adapter description
  489.  5Ah    WORD    IRQ used by adapter
  490.  5Ch    WORD    transmit queue depth
  491.  5Eh    WORD    maximum supported number of data blocks in buffer descriptors
  492.  60h  N BYTEs    vendor-specific info
  493.  
  494. Bitfields for service flags:
  495.  bit 0    supports broadcast
  496.  bit 1    supports multicast
  497.  bit 2    supports functional/group addressing
  498.  bit 3    supports promiscuous mode
  499.  bit 4    station address software settable
  500.  bit 5    statistics always current
  501.  bit 6    supports InitiateDiagnostics
  502.  bit 7    supports loopback
  503.  bit 8    MAC does primarily ReceiveChain indications instead of ReceiveLookahead
  504.     indications
  505.  bit 9    supports IBM source routing
  506.  bit 10 supports MAC reset
  507.  bit 11 supports Open/Close adapter
  508.  bit 12 supports interrupt request
  509.  bit 13 supports source routing bridge
  510.  bit 14 supports GDT virtual addresses (OS/2 version)
  511.  bit 15 multiple TransferDatas allowed durign a single indication
  512.  bit 16 MAC normally sets FrameSize = 0 in ReceiveLookahead
  513.  bit 17-31 reserved, must be 0
  514.  
  515. Format of NetBIOS Service-Specific Characteristics Table
  516. Offset    Size    Description
  517.  00h    WORD    length of table in bytes
  518.  02h 16 BYTEs    ASCIZ type name of NetBIOS module
  519.  12h    WORD    NetBIOS module code
  520.  14h  N BYTEs    vendor-specific info
  521.  
  522. Format of MAC Service-Specific Status Table:
  523. Offset    Size    Description
  524.  00h    WORD    length of table in bytes
  525.  02h    DWORD    seconds since 0:00 1/1/70 when diagnostics last run
  526.         (FFFFFFFFh = never)
  527.  06h    DWORD    MAC status bits (see below)
  528.  0Ah    WORD    current packet filter flags
  529.         bit 0: directed/multicast or group/functional
  530.         bit 1: broadcast
  531.         bit 2: promiscuous
  532.         bit 3: all source routing
  533.         bits 4-15: reserved, must be zero
  534.  0Ch    DWORD    pointer to media-specific status table or 0000h:0000h
  535.  10h    DWORD    seconds past 0:00 1/1/70 of last ClearStatistics
  536.  14h    DWORD    total frames received (FFFFFFFFh = not counted)
  537.  18h    DWORD    frames with CRC error (FFFFFFFFh = not counted)
  538.  1Ch    DWORD    total bytes received (FFFFFFFFh = not counted)
  539.  20h    DWORD    frames discarded--no buffer space (FFFFFFFFh = not counted)
  540.  24h    DWORD    multicast frames received (FFFFFFFFh = not counted)
  541.  28h    DWORD    broadcast frames received (FFFFFFFFh = not counted)
  542.  2Ch    DWORD    frames with errors (FFFFFFFFh = not counted)
  543.  30h    DWORD    overly large frames (FFFFFFFFh = not counted)
  544.  34h    DWORD    frames less than minimum size (FFFFFFFFh = not counted)
  545.  38h    DWORD    multicast bytes received (FFFFFFFFh = not counted)
  546.  3Ch    DWORD    broadcast bytes received (FFFFFFFFh = not counted)
  547.  40h    DWORD    frames discarded--hardware error (FFFFFFFFh = not counted)
  548.  44h    DWORD    total frames transmitted (FFFFFFFFh = not counted)
  549.  48h    DWORD    total bytes transmitted (FFFFFFFFh = not counted)
  550.  4Ch    DWORD    multicast frames transmitted (FFFFFFFFh = not counted)
  551.  50h    DWORD    broadcast frames transmitted (FFFFFFFFh = not counted)
  552.  54h    DWORD    broadcast bytes transmitted (FFFFFFFFh = not counted)
  553.  58h    DWORD    multicast bytes transmitted (FFFFFFFFh = not counted)
  554.  5Ch    DWORD    frames not transmitted--timeout (FFFFFFFFh = not counted)
  555.  60h    DWORD    frames not transmitted--hardware error (FFFFFFFFh = not countd)
  556.  64h  N BYTEs    vendor-specific info
  557.  
  558. Bitfields for MAC status bits:
  559.  bits 0-2    operational status
  560.         000 hardware not installed
  561.         001 hardware failed startup diagnostics
  562.         010 hardware configuration problem
  563.         011 hardware fault
  564.         100 operating marginally due to soft faults
  565.         101 reserved
  566.         110 reserved
  567.         111 hardware fully operational
  568.  bit 3    MAC bound
  569.  bit 4    MAC open
  570.  bit 5    diagnostics in progress
  571.  bits 6-31 reserved
  572. --------I-214402-----------------------------
  573. INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
  574.     AX = 4402h
  575.     BX = handle for character device "GDMS"
  576.     CX = number of bytes to read (>= 4)
  577.     DS:DX -> buffer (see below)
  578. Return: CF set on error
  579.         AX = error code (see AH=59h)
  580.     CF clear if successful
  581.         AX = number of bytes read
  582.  
  583. Format of returned data:
  584. Offset    Size    Description
  585.  00h  4 BYTEs    ???
  586.  04h    DWORD    pointer to ???
  587.  08h  4 BYTEs    ???
  588. --------m-214402-----------------------------
  589. INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
  590.     AX = 4402h
  591.     BX = handle for device "LA$TBYTE"
  592.     CX = 0004h
  593.     DS:DX -> DWORD to hold address of 39-byte table of ???
  594. Return: CF set on error
  595.         AX = error code (see AH=59h)
  596.     CF clear if successful
  597.         AX = number of bytes read
  598. Program: LASTBYTE.SYS is part of the shareware "The Last Byte" memory
  599.       management package by Key Software Products
  600. SeeAlso: AX=4402h"HIGHUMM"
  601. --------m-214402-----------------------------
  602. INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
  603.     AX = 4402h
  604.     BX = handle for device "KSP$UMM"
  605.     CX = 0004h
  606.     DS:DX -> DWORD to hold entry point
  607. Return: CF set on error
  608.         AX = error code (see AH=59h)
  609.     CF clear if successful
  610.         AX = number of bytes read
  611. Program: HIGHUMM.SYS is part of the shareware "The Last Byte" memory management
  612.       package by Key Software Products
  613. SeeAlso: AX=4402h"LASTBYTE"
  614.  
  615. Call HIGHUMM.SYS entry point with:
  616.     AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
  617.         DX = size in paragraphs
  618.         Return: BX = segment number (if successful)
  619.             DX = size of requested block/size of largest block
  620.     AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
  621.         DX = segment number of UMB
  622.     AH = 02h request a bank-switched memory block
  623.         DX = size in paragraphs
  624.         Return: BX = segment number (if successful)
  625.             DX = size of requested block/size of largest block
  626.     AH = 03h release a bank-switched memory block
  627.         DX = segment number
  628.     AH = 04h transfer data to/from high memory
  629.         DS:SI -> source
  630.         ES:DI -> destination
  631.         CX = length in bytes
  632.         Note: enables bank-switched memory, does the copy, then disables
  633.         bank-switched memory
  634.     AH = 05h get a word from bank-switched memory
  635.         ES:DI -> word to read
  636.         Return: DX = word
  637.     AH = 06h put a word to bank-switched memory
  638.         ES:DI -> word to write
  639.         DX = word
  640.     AH = 07h put a byte to bank-switched memory
  641.         ES:DI -> byte to write
  642.         DL = byte
  643.     AH = 08h enable bank-switched memory
  644.         DS:SI -> 6-byte status save area
  645.     AH = 09h disable bank-switched memory
  646.         DS:SI -> 6-byte save area from enable call (AH=08h)
  647.     AH = 0Ah assign name to UMB or high bank-switched block
  648.         DX = segment number
  649.         DS:SI -> 8-byte blank-padded name
  650.     AH = 0Bh locate UMB block by name
  651.         DS:SI -> 8-byte blank-padded name
  652.         Return: BX = segment number (if successful)
  653.             DX = size of block
  654.     AH = 0Ch locate bank-switched block by name
  655.         DS:SI -> 8-byte blank-padded name
  656.         Return: BX = segment number (if successful)
  657.             DX = size of block
  658. Return: AX = status code
  659.         0001h successful
  660.         0000h failed
  661.         BL = error code
  662.             80h not implemented
  663.             B0h insufficient memory, smaller block available
  664.             B1h insufficient memory, no blocks available
  665.             B2h invalid segment number
  666. Note:    only functions 00h and 01h are always available; the remaining
  667.       functions are only enabled if the proper commandline switch is given
  668. --------c-214402-----------------------------
  669. INT 21 - SMARTDRV.SYS v3.x only - IOCTL - GET CACHE STATUS
  670.     AX = 4402h
  671.     BX = file handle for device "SMARTAAR"
  672.     CX = number of bytes to read (min 28h)
  673.     DS:DX -> buffer for status record (see below)
  674. Return: CF clear if successful
  675.         AX = number of bytes actually read
  676.     CF set on error
  677.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  678. SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  679.  
  680. Format of SMARTDRV status record:
  681. Offset    Size    Description
  682.  00h    BYTE    write-through flag (always 01h)
  683.  01h    BYTE    writes should be buffered (always 00h)
  684.  02h    BYTE    cache enabled if 01h
  685.  03h    BYTE    driver type (01h extended memory, 02h expanded)
  686.  04h    WORD    clock ticks between cache flushes (currently unused)
  687.  06h    BYTE    cache contains locked tracks if nonzero
  688.  07h    BYTE    flush cache on INT 19 reboot if nonzero
  689.  08h    BYTE    cache full track writes if nonzero
  690.  09h    BYTE    double buffering (for VDS) state (00h off, 01h on, 02h dynamic)
  691.  0Ah    DWORD    original INT 13 vector
  692.  0Eh    BYTE    minor version number
  693.  0Fh    BYTE    major version number
  694.  10h    WORD    unused
  695.  12h    WORD    sectors read            \
  696.  14h    WORD    sectors already in cache     > may be scaled rather than
  697.  16h    WORD    sectors already in track buffer /  absolute counts
  698.  18h    BYTE    cache hit rate in percent
  699.  19h    BYTE    track buffer hit rate in percent
  700.  1Ah    WORD    total tracks in cache
  701.  1Ch    WORD    number of tracks in use
  702.  1Eh    WORD    number of locked tracks
  703.  20h    WORD    number of dirty tracks
  704.  22h    WORD    current cache size in 16K pages
  705.  24h    WORD    original (maximum) cache size in 16K pages
  706.  26h    WORD    minimum cache size in 16K pages
  707.  28h    DWORD    pointer to byte flag to increment for locking cache contents
  708. --------d-214402-----------------------------
  709. INT 21 - CD-ROM device driver - IOCTL INPUT
  710.     AX = 4402h
  711.     BX = file handle referencing character device for CD-ROM driver
  712.     CX = number of bytes to read
  713.     DS:DX -> control block (see below)
  714. Return: CF clear if successful
  715.         AX = number of bytes actually read
  716.     CF set on error
  717.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  718. Note:    the data returned depends on the first byte of the control block; the
  719.       remainder of the control block is filled by the driver
  720. SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h
  721.  
  722. Values for data being requested:
  723.  00h    device driver header address
  724.  01h    drive head location
  725.  02h    reserved
  726.  03h    error statistics
  727.  04h    audio channel info
  728.  05h    raw drive bytes (uninterpreted and device-specific)
  729.  06h    device status
  730.  07h    sector size
  731.  08h    volume size
  732.  09h    media change status
  733.  0Ah    audio disk info
  734.  0Bh    audio track info
  735.  0Ch    audio Q-Channel info
  736.  0Dh    audio sub-channel info
  737.  0Eh    UPC code
  738.  
  739. Format of control block:
  740. Offset    Size    Description
  741.  00h    BYTE    data being requested (see above)
  742. ---function 00h---
  743.  01h    DWORD    device driver header address (see also AH=52h)
  744. ---function 01h---
  745.  01h    BYTE    addressing mode
  746.         00h HSG
  747.         01h Red Book
  748.  02h    DWORD    current location of drive's head
  749.         logical sector number in HSG mode
  750.         frame/second/minute/unused in Red Book mode
  751.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  752. ---function 03h---
  753.  01h  N BYTEs    undefined as of 5 Aug 88 specification
  754. ---function 04h---
  755.  01h    BYTE    input channel (0-3) for output channel 0
  756.  02h    BYTE    volume for output channel 0
  757.  03h    BYTE    input channel (0-3) for output channel 1
  758.  04h    BYTE    volume for output channel 1
  759.  05h    BYTE    input channel (0-3) for output channel 2
  760.  06h    BYTE    volume for output channel 2
  761.  07h    BYTE    input channel (0-3) for output channel 3
  762.  08h    BYTE    volume for output channel 3
  763. Notes:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  764.       right prime; a volume of 00h is off
  765.     the default setting is for each input channel to be assigned to the
  766.       same-numbered output channel at full (FFh) volume
  767. ---function 05h---
  768.  01h    BYTE    number of bytes read
  769.  02h 128 BYTEs    buffer for drive bytes
  770. ---function 06h---
  771.  01h    DWORD    device parameters (see below)
  772. ---function 07h---
  773.  01h    BYTE    read mode
  774.         00h cooked
  775.         01h raw
  776.  02h    WORD    sector size in bytes
  777. ---function 08h---
  778.  01h    DWORD    volume size in sectors
  779. ---function 09h---
  780.  01h    BYTE    media change status
  781.         00h don't know
  782.         01h media unchanged
  783.         FFh media has been changed
  784. ---function 0Ah---
  785.  01h    BYTE    lowest audio track number
  786.  02h    BYTE    highest audio track number
  787.  03h    DWORD    start address of lead-out track (Red Book format)
  788. --function 0Bh---
  789.  01h    BYTE    track number (set by caller)
  790.  02h    DWORD    starting point of track (Red Book format)
  791.  06h    BYTE    track control info
  792.         bits 15,14,12: track type (notice: bits not contiguous!)
  793.             000 two audio channels, no pre-emphasis
  794.             001 two audio channels with pre-emphasis
  795.             010 data track
  796.             100 four audio channels, no pre-emphasis
  797.             101 four audio channels with pre-emphasis
  798.             other reserved
  799.         bit 13: digital copy permitted
  800. ---function 0Ch---
  801.  01h    BYTE    CONTROL and ADR byte (as received from drive)
  802.  02h    BYTE    track number
  803.  03h    BYTE    point or index
  804.  04h    BYTE    minute    \
  805.  05h    BYTE    second     > running time within track
  806.  06h    BYTE    frame    /
  807.  07h    BYTE    zero
  808.  08h    BYTE    "AMIN" or "PMIN"     \
  809.  09h    BYTE    "ASEC" or "PSEC"      > running time on disk
  810.  0Ah    BYTE    "AFRAME" or "PFRAME" /
  811. ---function 0Dh---
  812.  01h    DWORD    starting frame address (Red Book format)
  813.  05h    DWORD    transfer address
  814.  09h    DWORD    number of sectors to read
  815. Note:    copies 96 bytes of sub-channel info per sector into buffer
  816. ---function 0Eh---
  817.  01h    BYTE    CONTROL and ADR byte
  818.  02h  7 BYTEs    UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
  819.  09h    BYTE    zero
  820.  0Ah    BYTE    "AFRAME"
  821.  
  822. Bitfields for device parameters:
  823.  bit 0    door open
  824.  bit 1    door unlocked
  825.  bit 2    supports raw reading in addition to cooked
  826.  bit 3    writable
  827.  bit 4    can play audio/video tracks
  828.  bit 5    supports interleaving
  829.  bit 6    reserved
  830.  bit 7    supports prefetch requests
  831.  bit 8    supports audio channel control
  832.  bit 9    supports Red Book addressing in addition to HSG
  833.  bit 10 audio is playing
  834. --------m-214402-----------------------------
  835. INT 21 - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
  836.     AX = 4402h
  837.     BX = file handle for device "QEMM386$"
  838.     CX = 0004h
  839.     DS:DX -> DWORD buffer for API entry point
  840. Return: CF clear if successful
  841.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  842.     CF set on error
  843.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  844. Note:    Quarterdeck recently (June 1993) documented this function, but the
  845.       documentation incorrectly states that it is only available for
  846.       QEMM 6+
  847. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  848. --------Q-214402-----------------------------
  849. INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
  850.     AX = 4402h
  851.     BX = file handle for device "HOOKROM$"
  852.     CX = 0004h
  853.     DS:DX -> DWORD buffer for address of hooked vector table (see below)
  854. Return: CF clear if successful
  855.         DS:DX buffer filled
  856.     CF set on error
  857.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  858. SeeAlso: AX=4402h/SF=01h
  859.  
  860. Format of hooked vector table entry:
  861. Offset    Size    Description
  862.  00h  5 BYTEs    FAR jump to actual interrupt handler
  863.         (end of table if first byte is not EAh)
  864.  05h    BYTE    interrupt vector number
  865. --------d-214402-----------------------------
  866. INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE
  867.     AX = 4402h
  868.     BX = file handle for device "SCSIMGR$"
  869.     CX = 0004h or 0005h (see notes)
  870.     DS:DX -> buffer for result (see below), set to zeros before call
  871. Return: CF clear if successful
  872.         AX = 0004h or 0005h (see notes)
  873.     CF set on error
  874.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  875. Note:    the variant of the call requesting five bytes is an UNDOCUMENTED
  876.       extension supported by Adaptec's ASPI2DOS.SYS, ASPI4DOS.SYS, and
  877.       ASPI7DOS.SYS; if made of a host manager which does not support the
  878.       variant, only four bytes will be returned.  If the variant is
  879.       supported, Adaptec's WINASPI.DLL assumes that the host manager is
  880.       an "advanced" one which operates in either real or protected mode
  881.       (and thus does not require a DPMI INT 31/AX=0301h call to be invoked
  882.       from protected mode).     Support of the five-byte variant also appears
  883.       to imply that an advanced ASPI host manager uses no temporary storage
  884.       space except the SRB and the stack, and that it is fully reentrant.
  885.     if called with a standard request for four bytes, even Adaptec's
  886.       advanced drivers return only the requested four bytes containing the
  887.       ASPI entry point address
  888.     the function address is called with the address of a SCSI Request
  889.       Block on the stack and the caller must clean up the stack
  890. SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000"
  891.  
  892. Format of IOCTL result:
  893. Offset    Size    Description
  894.  00h    DWORD    function address
  895.  04h    BYTE    number of SCSI host adapters supported by host manager
  896.  
  897. Format of SCSI Request Block (64 bytes):
  898. Offset    Size    Description
  899.  00h    BYTE    request number
  900.         00h "HA_INQ"     host adapter inquiry
  901.         01h "GET_TYPE"     get device type
  902.         02h "EXEC_SIO"     execute SCSI I/O
  903.         03h "ABORT_SRB"     abort SRB
  904.         04h "RESET_DEV"     reset SCSI device
  905.         05h "SET_HAPRMS" set host adapter parameters
  906.  01h    BYTE    request status
  907.         00h not done yet
  908.         02h aborted
  909.         04h SCSI I/O error
  910.         80h invalid
  911.         81h no adapter
  912.         82h no device attached
  913.         else status
  914.  02h    BYTE    host adapter ID
  915.  03h    BYTE    request flags
  916.         bit 3: ???
  917.  04h    DWORD    reserved
  918. ---request 00h---
  919.  08h    BYTE    (returned) number of host adapters
  920.  09h    BYTE    (returned) target adapter ID
  921.  0Ah 16 BYTEs    (returned) manager ID
  922.  1Ah 16 BYTEs    (returned) adapter ID
  923.  2Ah 16 BYTEs    (returned) parameters
  924. ---request 01h---
  925.  08h    BYTE    target ID
  926.  09h    BYTE    logical unit number
  927.  0Ah    BYTE    (returned) device type
  928.         01h streamer
  929. ---request 02h---
  930.  08h    BYTE    target ID
  931.  09h    BYTE    logical unit number
  932.  0Ah    DWORD    data allocation length
  933.  0Eh    BYTE    sense allocation length
  934.  0Fh    DWORD    data buffer pointer
  935.  13h    DWORD    next request pointer (for linking)
  936.  17h    BYTE    CDB length
  937.  18h    BYTE    (returned) host adapter status
  938.         11h select timeout
  939.         12h data overrun
  940.         13h bus error
  941.         14h bus failure
  942.  19h    BYTE    (returned) target status
  943.         02h sense data stored in SRB
  944.         08h target busy
  945.         18h reservation error
  946.  1Ah    DWORD    post routine address
  947.  1Eh    WORD    real mode Post DS
  948.  20h    DWORD    SRB pointer
  949.  24h    WORD    reserved
  950.  26h    DWORD    SRB physical address
  951.  2Ah 22 BYTEs    SCSIMGR$ workspace
  952.  40h  N BYTEs    CCB (20-24 bytes)
  953. ---request 04h---
  954.  08h    BYTE    target ID
  955.  09h    BYTE    logical unit number
  956.  0Ah 14 BYTEs    reserved
  957.  18h    BYTE    (returned) host adapter status (see above)
  958.  19h    BYTE    (returned) target status (see above)
  959.  1Ah    DWORD    post routine address
  960.  1Eh 34 BYTEs    workspace
  961.  
  962. Format of CCB:
  963. Offset    Size    Description
  964.  00h    BYTE    command code
  965.         01h rewind
  966.         05h get block size limits
  967.         08h read
  968.         0Ah write
  969.         10h write file marks
  970.         11h SCSI Space (set position?)
  971.         12h SCSI Inquire
  972.         19h erase
  973.         1Bh load/unload media
  974.  01h    BYTE    flags
  975.         bits 4-0: vary by function
  976.         bits 7-5: logical unit number
  977.  02h    BYTE    "adr_1"
  978.  03h    BYTE    "adr_0"
  979.  04h    BYTE    length
  980.  05h    BYTE    control
  981.     ...
  982.  06h/0Ah 14 BYTEs buffer for sense data
  983. --------m-214402-----------------------------
  984. INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE
  985.     AX = 4402h
  986.     BX = file handle for device "386MAX$$"
  987.     CX = number of bytes to read
  988.     DS:DX -> BYTE 03h followed by 386MAX state buffer (see below)
  989. Return: CF clear if successful
  990.         buffer at DS:DX+1 filled
  991.         AX = number of bytes actually copied
  992.     CF set on error
  993.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  994. Notes:    if the value given in CX is less than the size of the state record
  995.       (5Ah for v6.01, 66h for v7.00), only a partial state record will be
  996.       returned
  997.     the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$"
  998.       did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and
  999.       56h bytes for v5.11.
  1000.     to invoke 386MAX API functions, push DX onto the stack, load DX with
  1001.       the word at offset 25h in the returned state, load all other
  1002.       registers as needed for the desired function, and execute an
  1003.       OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return
  1004.       if it is not otherwise modified by the API function.    For safety,
  1005.       in case a function is not supported or 386MAX is not present, SP
  1006.       should be saved and restored around the API call.
  1007.     Windows 3.1 Standard mode, LAN Manager, and Windows for Workgroups all
  1008.       use the 386MAX API; LAN Manager and Windows for Workgroups reportedly
  1009.       make some calls incorrectly
  1010. SeeAlso: AX=4403h/SF=03h"386MAX",INT 67/AH=3Fh
  1011.  
  1012. Format of 386MAX v6.01+ state:
  1013. Offset    Size    Description
  1014.  -1    BYTE    (call) 03h
  1015.  00h  6 BYTEs    signature "386MAX"
  1016.  06h  4 BYTEs    version string "N;NN" (i.e. "6;01" for v6.01)
  1017.  0Ah    WORD    segment of low-memory portion of 386MAX.SYS
  1018.  0Ch  2 BYTEs    ???
  1019.  0Eh    WORD    segment of ??? memory block or 0000h
  1020.  10h    WORD    bit flags 1 (see below)
  1021.  12h    WORD    (v6.01) starting address of video memory in KB
  1022.         (v7.00) low memory size in bytes
  1023.  14h  2 BYTEs    ???
  1024.  16h    WORD    total high DOS memory in KB
  1025.  18h  2 BYTEs    ???
  1026.  1Ah    WORD    available shared memory in KB
  1027.  1Ch    WORD    KBytes extended memory used by 386MAX
  1028.  1Eh  2 BYTEs    ???
  1029.  20h    WORD    total extended memory in KB
  1030.  22h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions
  1031.  24h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX API functions
  1032.  26h    WORD    ??? (depends on DOS version)
  1033.  28h  2 BYTEs    ???
  1034.  2Ah    DWORD    machine type (see below)
  1035.  2Eh    WORD    ???
  1036.  30h    WORD    ???
  1037.  32h    WORD    system configuration flags (see below)
  1038.  34h    WORD    debugging flags 1 (see below)
  1039.  36h    WORD    debugging flags 2 (see below)
  1040.  38h  2 BYTEs    ???
  1041.  3Ah    WORD    segment of first MCB in high memory chain???
  1042.  3Ch    WORD    feature flags 1 (see below)
  1043.  3Eh    WORD    feature flags 2 (see below)
  1044.  40h    WORD    feature flags 3 (see below)
  1045.  42h    WORD    segment of first 386MAX control block??? (see below)
  1046.  44h    WORD    amount of memory to report available on INT 15/AH=88h
  1047.  46h  4 BYTEs    ???
  1048.  4Ah    WORD    number of K at start of address space swapped with fast
  1049.         extended memory (SWAP= parameter)
  1050.  4Ch  2 BYTEs    ???
  1051.  4Eh    WORD    ???
  1052.  50h    WORD    debugging flags 3 (see below)
  1053.  52h    DWORD    old INT 21h
  1054.  56h    DWORD    pointer to 386MAX's EMS (INT 67h) handler
  1055. ---386MAX v7.00---
  1056.  5Ah    DWORD    KB of extended memory managed by 386MAX
  1057.  5Eh    DWORD    bytes of extended memory (EXT= parameter)
  1058.  62h  4 BYTEs    ???
  1059.  
  1060. Bitfields for bit flags 1:
  1061.  bit 1    ???
  1062.  bit 2    ???
  1063.  bit 3    ??? (cleared by calling INT 67 functions)
  1064.  bit 4    high RAM present???
  1065.  bit 5    386MAX in AUTO mode
  1066.  bit 6    386MAX enabled
  1067.  bit 7    386MAX is providing EMS services
  1068.  bit 8    ???
  1069.  bit 9    A20 enabled??? (see INT 15/AX=2402h)
  1070.  bit 10    Weitek support enabled
  1071.  bit 11    ???
  1072.  bit 12    ???
  1073.  bit 13    QPMS has been used
  1074.  bit 14    ???
  1075.  bit 15    ???
  1076.  
  1077. Bitfields for system configuration flags:
  1078.  bit 1    ROM compressed???
  1079.  bit 3    ???
  1080.  bit 5    386MAX loaded into high memory
  1081.  bit 6    Microchannel bus
  1082.  bit 7    Weitek math coprocessor detected
  1083.  bit 11    PC/XT (thus only single 8259 interrupt controller present, DMA only
  1084.         in 1st megabyte, etc)
  1085.  bit 13    LMLTOP= specified
  1086.  bit 15    ???
  1087.  
  1088. Bitfields for debugging flags 1:
  1089.  bit 0    DEBUG=LED
  1090.  bit 1    DEBUG=X67
  1091.  bit 2    DEBUG=INV
  1092.  bit 3    DEBUG=EMSPTED
  1093.  bit 4    DEBUG=JMP
  1094.  bit 5    DEBUG=CALL
  1095.  bit 6    DEBUG=HLT
  1096.  bit 7    DEBUG=PMR
  1097.  bit 8    DEBUG=CR3
  1098.  bit 9    DEBUG=CAPS or DEBUG=INT
  1099.  bit 10    DEBUG=RC
  1100.  bit 11    DEBUG=ROM
  1101.  bit 12    DEBUG=XM
  1102.  bit 13    DEBUG=SOR
  1103.  bit 14    DEBUG=XR
  1104.  bit 15    DEBUG=EMSERR
  1105.  
  1106. Bitfields for debugging flags 2:
  1107.  bit 0    DEBUG=ROMSWAP
  1108.  bit 1    DEBUG=UNSHADOWROM
  1109.  bit 2    DEBUG=COMPROM
  1110.  bit 3    DEBUG=DPMIPHYS
  1111.  bit 4    DEBUG=ALLROM
  1112.  bit 5    DEBUG=VMS
  1113.  bit 6    DEBUG=XMS
  1114.  bit 7    DEBUG=I06
  1115.  bit 8    DEBUG=VCPI
  1116.  bit 9    DEBUG=XDMA
  1117.  bit 10    DEBUG=X09
  1118.  bit 13    DEBUG=I67
  1119.  bit 14    DEBUG=EVM
  1120.  bit 15 DEBUG=EMSSAVE or DEBUG=VDS
  1121.  
  1122. Bitfields for debugging flags 3:
  1123.  bit 10    DEBUG=EPM
  1124.  bit 12    DEBUG=ABIOS
  1125.  bit 13    DEBUG=XMSPTED
  1126.  bit 14    DEBUG=TIME
  1127.  bit 15    DEBUG=SCRUB
  1128.  
  1129. Bitfields for feature flags 1:
  1130.  bit 1    Weitek present
  1131.  bit 2    no DPMI services
  1132.  bit 3    NODMA
  1133.  bit 4    TERSE
  1134.  bit 5    NOROM
  1135.  bit 6    NOPARITY
  1136.  bit 8    NOFLEX (IGNOREFLEXFRAME)
  1137.  bit 11    don't create UMBs
  1138.  bit 12    don't backfill below video memory (NOLOW)
  1139.  bit 13    FRAME= specified
  1140.  bit 14    EXT= specified
  1141.  bit 15    NOEMS, allow prior expanded memory manager to provide EMS
  1142.  
  1143. Bitfields for feature flags 2:
  1144.  bit 0    UNSHIFT specified (FORCEA20 disabled)
  1145.  bit 1    NOXRAM
  1146.  bit 2    NOSCSI specified
  1147.  bit 3    SCREEN specified
  1148.  bit 4    enabled EISADMA
  1149.  bit 5    slow DMA
  1150.  bit 6    RESETKEYB specified
  1151.  bit 7    ???
  1152.  bit 9    TOP384
  1153.  bit 11    NOWARMBOOT
  1154.  bit 12    USE= specified
  1155.  bit 13    ROM= specified
  1156.  
  1157. Bitfields for feature flags 3:
  1158.  bit 0    Windows3 support enabled
  1159.  bit 1    SHADOWROM
  1160.  bit 2    don't compress ROM (NOCOMPROM)
  1161.  bit 3    ??? (related to PRGREG=)
  1162.  bit 4    ??? (related to PRGREG=)
  1163.  bit 5    SHADOWRAM
  1164.  bit 6    DOS4 specified
  1165.  bit 7    NOLOADHIGH
  1166.  bit 8    NOPULSE
  1167.  bit 11    FORCEA20
  1168.  bit 12    DMA buffer enabled
  1169.  bit 13 NOSCRUB
  1170.  bit 15    NOFRAME
  1171.  
  1172. Bitfields for machine type:
  1173.  bit 12 Amstrad
  1174.  bit 13 Epson
  1175.  bit 14 Zenith Data Systems
  1176.  bit 15    "ASEM"
  1177.  bit 16 NEC
  1178.  bit 17    "HPRS" model codes 69h and 6Ah
  1179.  bit 18 Dell
  1180.  bit 19    "CA"
  1181.  bit 20    ITT (Xtra Business Systems/Alcatel)
  1182.  bit 21    Toshiba 5100
  1183.  bit 22    Olivetti
  1184.  bit 23    Quadram Quad386 (BIOS model FEh, submodel A6h)
  1185.  bit 24    Tandy???
  1186.  bit 25    AST 386
  1187.  bit 26    INBOARD, ??? version
  1188.  bit 27    INBOARD, ??? version
  1189.  bit 28    INBOARD, ??? version
  1190.  bit 29    "HPRS"
  1191.  bit 30    Compaq 386
  1192.  bit 31    JET386
  1193.  
  1194. Format of 386MAX control block:
  1195. Offset    Size    Description
  1196.  00h    WORD    segment of next block (FFFFh if last)
  1197.  02h    WORD    segment of previous block (FFFFh if first)
  1198.  04h 12 BYTEs    filename
  1199.  10h    WORD    resident size in paragraphs
  1200.  12h    WORD    environment size???
  1201.  14h    WORD    real prsent environment size + 1 (0000h if ENVSAVE used)
  1202.  16h  2 BYTEs    ???
  1203.  18h    DWORD    initial size or SIZE=n in 386LOAD commandline
  1204.  1Ch    DWORD    SIZE=-1 ???
  1205.  20h    DWORD    SIZE= ???
  1206.  24h    BYTE    PRGREG= if specified, else FFh
  1207.  25h    BYTE    ENVREG= if specified, else FFh
  1208.  26h    BYTE    FlexFrame (00h not present, 01h present)
  1209.  27h  3 BYTEs    ???
  1210.  2Ah    BYTE    GROUP= or 00h if not present
  1211.  2Bh    BYTE    ???
  1212.  2Ch    WORD    PSP
  1213.  
  1214. Format of high memory info record:
  1215. Offset    Size    Description
  1216.  00h    WORD    segment address of memory region
  1217.  02h    WORD    size of memory region in paragraphs
  1218.  04h    BYTE    type or flags???
  1219.         00h if locked out
  1220.         02h if EMS page frame
  1221.         04h if high RAM
  1222.         42h if ROM
  1223.  05h    BYTE    ???
  1224.  
  1225. Format of ROM shadowing record:
  1226. Offset    Size    Description
  1227.  00h    WORD    segment of ROM???
  1228.  02h    WORD    segment of ROM???
  1229.  04h  2 BYTEs    ???
  1230.  06h    WORD    size of shadowed ROM in paragraphs
  1231.  08h  4 BYTEs    ???
  1232.  
  1233. Values for memory type:
  1234.  00h    unused by EMS
  1235.  01h    DOS
  1236.  04h    page frame overlapping ROM???
  1237.  80h    high memory
  1238.  84h    page frame???
  1239.  87h    video ROM???
  1240. Note:    the type may be 00h (unused) if the 16K page is split among different
  1241.       uses (such as ROM and high RAM)
  1242.  
  1243. Call 386MAX API (via OUT DX,AL) with:
  1244.     STACK: WORD value for DX
  1245.     AH = 01h get high memory information
  1246.         ES:DI -> buffer for array of high memory info records
  1247.             (see above)
  1248.         Return: CX = number of records placed in buffer
  1249.     AH = 02h get shadowed ROM info???
  1250.         ES:DI -> buffer for array of ROM shadowing records (see above)
  1251.         Return: CX = number of records placed in buffer
  1252.     AH = 03h get 386MAX state
  1253.         ES:DI -> 90-byte buffer for state (see above)
  1254.         Return: AH = 00h (successful)
  1255.             buffer filled
  1256.         Note:    unlike INT 21/AX=4402h"386MAX", this function omits
  1257.               the first byte specifying the state buffer version
  1258.     AH = 04h get memory types???
  1259.         ES:DI -> buffer for memory type info (array of bytes, one per
  1260.             16K page) (see above)
  1261.         Return:    CX = number of bytes placed in buffer
  1262.     AH = 05h get ???
  1263.         AL = A20 control (00h enable A20 first, 01h leave unchanged)
  1264.         CX = number of 4K pages to report (0000h for default)
  1265.         SI = first K to report (rounded down to 4K page)
  1266.         ES:DI -> buffer for returned info on ???
  1267.         Return: CX = number of 4K pages reported on
  1268.             ???
  1269.     AH = 06h get memory speed info
  1270.         ES:DI -> buffer for memory speed records (see below)
  1271.         Return: AH = 00h (successful)
  1272.             CX = number of bytes placed in buffer
  1273.         Note:    this function can take over a second to execute
  1274.     AH = 07h ???
  1275.         DX = EMS handle (on stack)
  1276.         ???
  1277.         Return:    ???
  1278.     AH = 08h "EMM2_GOREAL" check whether possible to disable 386MAX
  1279.         AL = ??? (00h or nonzero)
  1280.         Return: AH = status (00h OK, A4h not possible at this time)
  1281.         Note:    if AL=00h, this function always returns success
  1282.     AH = 09h toggle Bit Flags 1 flags
  1283.         BX = bitmask of bit flags 1's flags to toggle (see above)
  1284.         Return: AH = 00h (successful)
  1285.         Note:    enables A20 first
  1286.     AH = 0Ah toggle system configuration flags
  1287.         BX = bitmask of system configuration flags to toggle
  1288.               (see above)
  1289.         Return: AH = 00h (successful)
  1290.         Notes:    enabled A20 first
  1291.             does ??? if bit 3 on after specified bits are toggled
  1292.     AH = 0Bh toggle debugging flags 1
  1293.         BX = bitmask of debugging flags 1's bits to toggle (see above)
  1294.         Return: AH = 00h (successful)
  1295.         Note:    enables A20 first
  1296.     AH = 0Ch toggle feature flags 3
  1297.         BX = bitmask of feature flags 3's bits to toggle (see above)
  1298.         Return: AH = 00h (successful)
  1299.         Note:    enables A20 first
  1300.     AH = 0Dh specify 386MAX high-memory location
  1301.         BX = segment address of high-memory real-mode portion of 386MAX
  1302.         CX = current segment of real-mode stub???
  1303.         Return: AH = status (00h successful)
  1304.             ???
  1305.     AH = 0Eh CRT controller register virtualization
  1306.         AL = subfunction
  1307.             00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h
  1308.             01h trap accesses to CRTC I/O ports
  1309.     AH = 0Fh reboot system
  1310.         Return: never
  1311.     AH = 11h get high memory information
  1312.         ES:DI -> 96-byte buffer for high memory info
  1313.         Return: AH = 00h (successful)
  1314.             ES:DI buffer filled
  1315.         Notes:    each byte in buffer contains bit flags for a 4K page in
  1316.               the A000h-FFFFh region
  1317.                 bit 0: ???
  1318.                 bit 1: physical address same as linear address
  1319.                 bit 2: EMS page frame
  1320.                 bit 6: ???
  1321.             this function can take over a second to execute,
  1322.               because it also tests the memory
  1323.     AH = 12h ???
  1324.         AL = subfunction
  1325.             00h ???
  1326.             01h ???
  1327.         ???
  1328.         Return: AH = 00h (successful) if AL=00h or 01h
  1329.             AH = 8Fh otherwise
  1330.     AH = 13h page protection???
  1331.         AL = subfunction
  1332.             00h set all ??? 4K pages to read-only???
  1333.             01h set all ??? 4K pages to read-write???
  1334.         ???
  1335.         Return: AH = 00h (successful) if AL=00h or 01h
  1336.             AH = 8Fh otherwise
  1337.     AH = 14h ???
  1338.         ES:DI -> 54-byte buffer for ???
  1339.         Return: AH = 00h if successful
  1340.             AH = A4h on error
  1341.     AH = 15h ???
  1342.         ???
  1343.         Return: ???
  1344.     AH = 16h get 386MAX memory usage screen
  1345.         ES:DI -> buffer for memory info display
  1346.         CX = size of buffer in bytes
  1347.         Return:    ES:DI buffer filled with '$'-terminated string (if
  1348.                 large enough to hold entire usage screen)
  1349.         Note:    the screen is 0303h bytes in v7.00
  1350.     AH = 17h Windows 3 startup/termination
  1351.         AL = subfunction
  1352.             00h Windows3 initializing
  1353.             DX (on stack) = Windows startup flags
  1354.             DI = Windows version number (major in upper byte)
  1355.             ES:BX = 0000h:0000h
  1356.             DS:SI = 0000h:0000h
  1357.             Return: CX = 0000h if OK for Windows to load
  1358.                    <> 0 if Windows should not load
  1359.                 ES:BX -> startup info structure
  1360.                 DS:SI -> Virtual86 mode enable/disable callback
  1361.             01h Windows3 terminating
  1362.             ES:BX -> ???
  1363.             DX (on stack) = Windows exit flags
  1364.             Return: ???
  1365.     AH = 18h QPMS (Qualitas Protected Memory Services)
  1366.         AL = subfunction
  1367.             00h get QPMS configuration
  1368.             Return: BX = starting segment of QPMS memory window
  1369.                 CX = number of 4K pages reserved for QPMS???
  1370.                 DX = number of 4K pages in QPMS window???
  1371.             01h map QPMS memory page???
  1372.             BX = 4K page number within memory reserved for QPMS???
  1373.             CL = 4K page number within QPMS memory window???
  1374.             02h mark all QPMS memory read-only
  1375.             03h mark all QPMS memory read-write
  1376.         Return: AH = status (00h,8Ah,8Bh,8Fh)
  1377.     AH = 19h get linear address for physical address
  1378.         EDX = physical address (low word on stack)
  1379.         Return: AH = status
  1380.                 00h successful
  1381.                 EDX = linear address at which physical address
  1382.                     may be accessed
  1383.                 8Bh physical address currently not addressable
  1384.         Note:    enables A20 first
  1385.     AH = 1Ah set page table entry???
  1386.         EDX = new page table entry??? (low word on stack)
  1387.         ESI = linear address of page???
  1388.         Return: AH = status (00h,8Bh)
  1389.         Note:    enables A20 first
  1390.     AH = 1Bh get ???
  1391.         Return: AH = status
  1392.             BX = ???
  1393.             CX = ???
  1394.             EDX = physical address of ???
  1395.     AH = 1Ch get original interrupt vector
  1396.         AL = interrupt vector (00h-7Fh)
  1397.         Return: AH = 00h (successful)
  1398.             EDX = original vector before 386MAX loaded (segment in
  1399.                 high word, offset in low word)
  1400.         Note:    no range checking is performed; requests for INTs 80h-
  1401.               FFh will return random values
  1402.     AH = 1Dh display string???
  1403.         SI = ???
  1404.         Return: AH = 00h (successful)
  1405.             ???
  1406.     AH = 1Eh get memory info
  1407.         ES:DI -> memory info (see below)
  1408.         Return: ???
  1409.     AH = 1Fh get DPMI host information
  1410.         Return: AX = 0000h if successful
  1411.             BX = DPMI flags (see INT 31/AX=0400h)
  1412.             CL = CPU type (02h = 80286, 03h = 80386, etc.)
  1413.             DX = DPMI ver supported (DH=major, DL=2-digit minor)
  1414.             SI = ???
  1415.             ES???:DI -> ???
  1416.         Note:    NOP if NODPMI switch specified
  1417.     AH = 20h (v7.00) ???
  1418.         AL = ???
  1419.         Return: EDX = ??? for ??? AL
  1420.     AH = 21h (v7.00) STACKS support
  1421.         AL = 00h get STACKS parameters
  1422.         Return: BX = ???
  1423.             CX = number of stacks for hardware interrupts
  1424.             DX = size of each stack in bytes
  1425.             SI = ???
  1426.             DI = ???
  1427.         AL = 01h set ??? "EMM2_DSTKS"
  1428.         EBX = ???
  1429.         ECX = ???
  1430.         DS = ???
  1431.         AL = 02h ???
  1432.         BL = ??? (00h-03h)
  1433.         ???
  1434.     AH = 22h (v7.00)
  1435.         AL = 00h ???
  1436.         AL = nonzero ???
  1437.         ???
  1438.     AH = 23h (v7.00) ???
  1439.         AL = 00h set ???
  1440.         ???
  1441.         AL = 01h ???
  1442.         ???
  1443.         AL = 02h get ???
  1444.         CX = size of buffer
  1445.         ES:DI -> buffer for ???
  1446.         Return: CX = number of bytes actually returned
  1447.         AL = 03h set ???
  1448.         ES:DI -> buffer containing ASCIZ ???
  1449.         AL = 04h get ???
  1450.         ES:DI -> buffer for ASCIZ ???
  1451.     AH = 24h (v7.00) ???
  1452.         AL = 00h get ???
  1453.         Return: BX = current state of ??? (0/1)
  1454.         AL = 01h set ???
  1455.         BX = new state of ??? (0/1)
  1456.         AL = other ???
  1457.     AH = 25h (v7.00) ???
  1458.     AH = 26h (v7.00) ???
  1459.         Return: BX = ???
  1460.             CX = ???
  1461.     AH = 27h (v7.00) ???
  1462.         AL = 00h get ???
  1463.         Return: BX = ???
  1464.         AL = 01h ???
  1465.         BX = ???
  1466.         ES??? = ???
  1467.         AL = 02h ???
  1468.         ???
  1469.         AL = 03h ???
  1470.         CX = ???
  1471.         DX = ???
  1472.         ES??? = ???
  1473.         Return: ???
  1474.     AH = 28h (v7.00) get ???
  1475.         Return: CX = ???
  1476.             DX = ???
  1477.     AH = 29h (v7.00) get ???
  1478.         Return: AX = ???
  1479.     AH = 40h-5Dh EMS services (see INT 67/AH=40h etc)
  1480.     AH = DEh VCPI services (see INT 67/AX=DE00h etc)
  1481. Return: AH = status (as for EMS INT 67 calls)
  1482.         00h successful
  1483.         80h internal error
  1484.         81h hardware malfunction
  1485.         83h invalid handle
  1486.         84h    undefined function
  1487.         8Ah invalid logical page nuber
  1488.         8Bh illegal physical page number
  1489.         8Fh undefined subfunction
  1490.         A4h access denied
  1491.         etc.
  1492.     STACK popped (value placed in DX if no specific return value for DX)
  1493.  
  1494. Format of memory speed record:
  1495. Offset    Size    Description
  1496.  00h    DWORD    page table entry for 4K page
  1497.  04h    WORD    number of microticks (840ns units) required for REP LODSD of
  1498.         entire 4K page
  1499.  
  1500. Format of memory info [array]:
  1501. Offset    Size    Description
  1502.  00h    DWORD    ???
  1503.  04h    DWORD    ???
  1504.  08h  2 BYTEs    ???
  1505.  0Ah    BYTE    type??? (03h = conventional???)
  1506.  0Bh    BYTE    ???
  1507. --------V-214402-----------------------------
  1508. INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO
  1509.     AX = 4402h
  1510.     BX = file handle for device "PGS1600$"
  1511.     CX = 0018h (size of buffer)
  1512.     DS:DX -> configuration buffer (see below)
  1513. Return: CF clear if successful
  1514.         buffer filled
  1515.         AX = number of bytes actually copied
  1516.     CF set on error
  1517.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1518. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  1519.       display adapter, which provides a 1600x1200 monochrome display as
  1520.       well as one of two emulations, MDA or CGA.
  1521. SeeAlso: AX=4403h"PGS1600"
  1522.  
  1523. Format of configuration information:
  1524. Offset    Size    Description
  1525.  00h    WORD    version (high byte = major, low byte = minor)
  1526.  02h    WORD    board initialisation mode
  1527.  04h    WORD    board I/O address
  1528.         03D0h CGA emulation
  1529.         03B0h MDA emulation
  1530.         0390h no emulation
  1531.         0350h no emulation, alternate
  1532.  06h    WORD    emulation buffer segment
  1533.         B800h    CGA emulation
  1534.         B000h    MDA emulation
  1535.         0000h    no emulation
  1536.  08h    WORD    PG1600 graphics buffer segment
  1537.  0Ah    WORD    number of bytes between consecutive graphic rows
  1538.  0Ch    WORD    horizontal pixel size
  1539.  0Eh    WORD    vertical pixel size
  1540.  10h    WORD    horizontal dots per inch
  1541.  12h    WORD    vertical dots per inch
  1542.  14h    WORD    graphics buffer bits per pixel
  1543.  16h    WORD    monitor bits per pixel
  1544. --------N-214402-----------------------------
  1545. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  1546.     AX = 4402h
  1547.     BX = file handle referencing device "$IPCUST"
  1548.     CX, DS:DX ignored
  1549. Return: CF clear if successful
  1550.         AX destroyed
  1551.     CF set on error
  1552.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1553. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  1554.       version 2.05.     If less than the entire data is read or written,
  1555.       the next read/write continues where the previous one ended; this
  1556.       call and AX=4403h both reset the location at which the next
  1557.       operation starts to zero
  1558.     v2.1+ uses a new configuration method, but allows the installation
  1559.       of IPCUST.SYS for backward compatibility with other software which
  1560.       must read the PC/TCP configuration
  1561. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4403h"IPCUST"
  1562. --------N-214402-----------------------------
  1563. INT 21 - WORKGRP.SYS - GET API ENTRY POINT
  1564.     AX = 4402h
  1565.     BX = file handle for device "NET$HLP$"
  1566.     CX = 0008h
  1567.     DS:DX -> buffer for entry point record
  1568. Return: CF clear if successful
  1569.         AX = number of bytes actually read
  1570.     CF set on error
  1571.         AX = error code
  1572. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  1573.       permits communication with PCs running Windows for Workgroups or
  1574.       LAN Manager
  1575. SeeAlso: AH=3Fh"WORKGRP.SYS"
  1576.  
  1577. Format of entry point record:
  1578. Offset    Size    Description
  1579.  00h    WORD    3633h  \ signature???
  1580.  02h    WORD    EF6Fh  /
  1581.  04h    DWORD    address of entry point
  1582. Note:    first four bytes of buffer must be 6Fh E9h 33h 36h on entry when using
  1583.       IOCTL rather than READ to get the entry point record
  1584.  
  1585. Call WORKGRP entry point with:
  1586.     STACK:    WORD    function number (0000h-0009h)
  1587. Return: STACK unchanged
  1588.  
  1589. Call WORKGRP function 00h with:
  1590.     STACK:    WORD    0000h (function "get ???")
  1591. Return: DX:AX -> data table
  1592.  
  1593. Call WORKGRP function 01h with:
  1594.     STACK:    WORD    0001h (function "hook ???")
  1595. Return: STACK:    DWORD    pointer to ???
  1596.         WORD    0001h (function number)
  1597.  
  1598. Call WORKGRP function 02h with:
  1599.     STACK:    WORD    0002h (function "unhook ???")
  1600.     ???
  1601. Return: ???
  1602.  
  1603. Call WORKGRP function 03h with:
  1604.     STACK:    WORD    0003h (function "reenable printer port")
  1605.         WORD    LPT port number
  1606. Return: ???
  1607.  
  1608. Call WORKGRP function 04h with:
  1609.     STACK:    WORD    0004h (function "disable printer port")
  1610.         WORD    LPT port number
  1611. Return: ???
  1612.  
  1613. Call WORKGRP function 05h with:
  1614.     STACK:    WORD    0005h (function "???")
  1615.         ???
  1616. Return: ???
  1617.  
  1618. Call WORKGRP function 06h with:
  1619.     STACK:    WORD    0006h (function "???")
  1620. Return: STACK unchanged
  1621.     AX = 0000h
  1622.     DX = 0000h
  1623.  
  1624. Call WORKGRP functions 07h-09h with:
  1625.     STACK:    WORD    0007h-0009h (NOP functions)
  1626. Return: STACK unchanged
  1627.     AX = 0001h
  1628.     DX = 0000h
  1629. --------N-214402-----------------------------
  1630. INT 21 - 10NET v5.0 - 10BEUI.DOS - API
  1631.     AX = 4402h
  1632.     BX = file handle referencing device "10BEUI$"
  1633.     DS:DX -> parameter record (see below)
  1634.     CX ignored
  1635. Return: CF clear if successful
  1636.         AX destroyed
  1637.     CF set on error
  1638.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1639. SeeAlso: AX=4402h"10MEMMGR",INT 6F/AH=00h"10NET"
  1640.  
  1641. Format of parameter record:
  1642. Offset    Size    Description
  1643.  00h    WORD    000Ah (function number???)
  1644.  02h    WORD    ???
  1645.  04h    DWORD    pointer to buffer for ???
  1646.  08h  4 BYTEs    ???
  1647.  0Ch    WORD    transfer size
  1648. --------N-214402-----------------------------
  1649. INT 21 - 10NET v5.0 - 10MEMMGR.SYS - API
  1650.     AX = 4402h
  1651.     BX = file handle referencing device "MEMMGR0$"
  1652.     DS:DX -> 6-byte buffer for interface info (see below)
  1653.     CX ignored
  1654. Return: CF clear if successful
  1655.         AX destroyed
  1656.     CF set on error
  1657.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1658. SeeAlso: AX=4402h"10BEUI",INT 6F/AH=00h"10NET"
  1659.  
  1660. Format of interface info:
  1661. Offset    Size    Description
  1662.  00h    DWORD    address of entry point (see below)
  1663.  04h    WORD    version (0500h for v5.00)
  1664.  
  1665. Call entry point with:
  1666.     AL = 01h ???
  1667.         BX = ???
  1668.         Return: CF clear if successful
  1669.             CF set on error
  1670.             AX = error code
  1671.     AL = 02h ???
  1672.         ???
  1673.     AL = 03h ???
  1674.         ???
  1675.     AL = 04h set/restore memory allocation strategy
  1676.         BX = subfunction
  1677.         0000h set strategy
  1678.         0001h restore strategy
  1679.         Return: CF clear if successful
  1680.             CF set on error (if function disabled)
  1681.             various registers destroyed
  1682.     AL = other
  1683.         Return: CF set
  1684.             AX = 0000h
  1685.             BL = 01h
  1686. --------m-214402SF00-------------------------
  1687. INT 21 U - Memory Managers - GET API ENTRY POINT
  1688.     AX = 4402h subfn 00h
  1689.     BX = file handle for device "EMMXXXX0"
  1690.     CX = 0006h (size of buffer in bytes)
  1691.     DS:DX -> buffer for API entry point record (see below)
  1692.         first byte must be 00h on entry
  1693. Return: CF clear if successful
  1694.         buffer filled (see INT 67/AH=3Fh function 1B00h)
  1695.     CF set on error
  1696.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1697. Notes:    this function is supported by Microsoft EMM386.EXE v4.45+ and
  1698.       CEMM v5.10+, and is intended for use by MS Windows as it starts up
  1699.     if no other program has hooked INT 67, an alternate installation
  1700.       check for CEMM is testing for the string
  1701.       "COMPAQ EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  1702.       handler's segment; if present, the word at offset 12h contains the
  1703.       offset of the API entry point
  1704. SeeAlso: AX=4402h/SF=01h,AX=4402h/SF=02h,AX=4402h"EMM386",INT 67/AH=3Fh
  1705.  
  1706. Format of API entry point record:
  1707. Offset    Size    Description
  1708.  00h    WORD    ??? (0022h for CEMM 5.11, 0025h for MS EMM386 v4.45)
  1709.  02h    DWORD    manager's private API entry point (see below,INT 67/AX=FFA5h)
  1710.  
  1711. Call CEMM v5.10+ entry point with:
  1712.     AH = 00h get memory manager's state
  1713.         Return: AH = state
  1714.             bit 0: turned OFF
  1715.             bit 1: AUTO mode enabled
  1716.     AH = 01h set memory manager's state
  1717.         AL = new state (00h ON, 01h OFF, 02h AUTO)
  1718.         Return: CF clear if successful
  1719.             CF set on error
  1720.     AH = 02h Weitek coprocessor support
  1721.         AL = subfunction
  1722.         00h get Weitek support state
  1723.             Return: AL = status
  1724.                 bit 0: Weitek coprocessor is present
  1725.                 bit 1: Weitek support is enabled
  1726.         01h turn on Weitek support
  1727.         02h turn off Weitek support
  1728.         Return: CF clear if successful
  1729.             CF set on error
  1730.             AH = error code (01h invalid subfunc, 02h no Weitek)
  1731.     AH = 05h get statistics
  1732.         ???
  1733.     AH > 06h
  1734.         Return: CF set
  1735.             AH = 01h (invalid function)
  1736. Notes:    AH=03h,04h,06h are NOPs which return CF clear, presumably for backwards
  1737.       compatibility with earlier versions of CEMM
  1738.     in v5.11, AH=05h merely prints an error message (using INT 21/AH=09h)
  1739.       stating that a different version of CEMM is installed and it is
  1740.       therefore not possible to display the statistics
  1741. --------m-214402SF01-------------------------
  1742. INT 21 U - Memory Managers - GET EMM IMPORT STRUCTURE ADDRESS
  1743.     AX = 4402h subfn 01h
  1744.     BX = file handle for device "EMMXXXX0"
  1745.     CX = 0006h (size of buffer in bytes)
  1746.     DS:DX -> buffer for EMM import structure record (see below)
  1747.         first byte must be 01h on entry
  1748. Return: CF clear if successful
  1749.         buffer filled (see INT 67/AH=3Fh function 1B00h)
  1750.     CF set on error
  1751.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1752. Notes:    this function is supported by Microsoft EMM386.EXE v4.45+,
  1753.       QEMM-386 v6+, and CEMM v5.10+, and is intended for use by MS Windows
  1754.       as it starts up
  1755.     for QEMM-386, this call always returns an error if Windows3 support
  1756.       has been disabled with the NW3 switch
  1757. SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 2F/AX=D201h/BX=5145h
  1758. SeeAlso: INT 67/AH=3Fh
  1759.  
  1760. Format of EMM import structure record:
  1761. Offset    Size    Description
  1762.  00h    DWORD    physical address of EMM import structure
  1763.  04h    BYTE    EMM import structure major version
  1764.  05h    BYTE    EMM import structure minor version
  1765. --------m-214402SF02-------------------------
  1766. INT 21 U - Memory Managers - GET MEMORY MANAGER VERSION
  1767.     AX = 4402h subfn 02h
  1768.     BX = file handle for device "EMMXXXX0"
  1769.     CX = 0002h (size of buffer in bytes)
  1770.     DS:DX -> buffer for memory manager version (see below)
  1771.         first byte must be 02h on entry
  1772. Return: CF clear if successful
  1773.         buffer filled
  1774.     CF set on error
  1775.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1776. Note:    this function is supported by Microsoft EMM386.EXE v4.45+ and
  1777.       CEMM v5.10+, and is intended for use by MS Windows as it starts up
  1778. SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 67/AH=3Fh
  1779.  
  1780. Format of memory manager version:
  1781. Offset    Size    Description
  1782.  00h    BYTE    major version
  1783.  01h    BYTE    minor version (binary)
  1784. --------m-214402-----------------------------
  1785. INT 21 U - Microsoft EMM386.EXE v4.45 - GET MEMORY MANAGER INFORMATION
  1786.     AX = 4402h
  1787.     BX = file handle for device "EMMXXXX0"
  1788.     CX = size of buffer in bytes (varies, see below)
  1789.     DS:DX -> buffer for returned data (see below)
  1790.         first byte must be set on entry to indicate desired data
  1791. Return: CF clear if successful
  1792.         buffer filled
  1793.     CF set on error
  1794.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1795. Notes:    an error is returned if the number of bytes to be read does not match
  1796.       the number of bytes returned for the specified data item
  1797.     this function is part of the interface which allows MS Windows to
  1798.       cooperate with memory managers
  1799. SeeAlso: AX=4402h/SF=00h,AX=4402h/SF=01h,AX=4402h/SF=02h,INT 67/AX=FFA5h
  1800.  
  1801. Format of data buffer:
  1802. Offset    Size    Description
  1803.  00h    BYTE    (call) function
  1804.         03h get ???
  1805.         04h get ???
  1806. ---function 03h---
  1807.  00h    WORD    ???
  1808.  02h    WORD    ???
  1809. ---function 04h---
  1810.  00h    WORD    segment of UMB containing EMM386 code/data
  1811.  02h    WORD    number of paragraphs of EMM386 code/data in UMB
  1812.  04h    WORD    ???
  1813. --------V-214402-----------------------------
  1814. INT 21 - Compaq AG1024.SYS - RGDI - GET DRIVER LOCATION
  1815.     AX = 4402h
  1816.     BX = file handle for device "$$$$RGDI"
  1817.     CX = 0006h (size of returned data)
  1818.     DS:DX -> location record (see below)
  1819. Return: CF clear if successful
  1820.         buffer filled
  1821.     CF set on error
  1822.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1823. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  1824. SeeAlso: AX=4403h"RGDI"
  1825.  
  1826. Format of location record:
  1827. Offset    Size    Description
  1828.  00h    WORD    signature 55AAh
  1829.  02h    WORD    segment of ???
  1830.  04h    WORD    segment of device driver's code
  1831. --------N-214402-----------------------------
  1832. INT 21 - FTPSOFT.DOS v3.1 - GET ???
  1833.     AX = 4402h
  1834.     BX = file handle for device "FTPSOFT$"
  1835.     CX = size of buffer
  1836.     DS:DX -> buffer for data (see below)
  1837. Return: CF clear if successful
  1838.         buffer filled
  1839.     CF set on error
  1840.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1841. Program: FTPSOFT.DOS is a device driver for Protocol Manager support from
  1842.        FTP Software, Inc.
  1843. SeeAlso: AH=3Fh"PC/TCP",AX=4402h"NDIS"
  1844.  
  1845. Format of data:
  1846. Offset    Size    Description
  1847.  00h    WORD    (call) BA98h (if different, no data returned)
  1848.  02h    DWORD    -> NDIS common characteristics table (see AX=4402h"NDIS")
  1849.  06h    DWORD    (call) -> new dispatch table (see AX=4402h"NDIS")
  1850.  0Ah    DWORD    -> 28-byte buffer for ??? data
  1851.  0Eh    DWORD    ???
  1852.  12h    DWORD    -> FAR function to reset dispatch jump table to defaults
  1853.  16h    BYTE    ???
  1854. Note:    the addresses in the new dispatch table are copied into an internal
  1855.       jump table which may be reset by calling the function pointed at by
  1856.       offset 12h
  1857. --------n-214402-----------------------------
  1858. INT 21 U - PenDOS PENDEV.SYS - GET ENTRY POINTS
  1859.     AX = 4402h
  1860.     BX = file handle for device "$$PENDOS" or "$$PD_REG"
  1861.     CX = size of buffer (4 for $$PENDOS and a 4,8,12, or 16 for $$PD_REG)
  1862.     DS:DX -> buffer for entry point record (see below)
  1863. Return: CF clear if successful
  1864.         buffer filled
  1865.     CF set on error
  1866.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1867. Program: A limited version of PenDOS by Communication Intelligence Corporation,
  1868.       which provides pen capability to keyboard-based programs, is bundled
  1869.       with IBM DOS 6.1
  1870. SeeAlso: AX=4403h"PENDEV.SYS"
  1871.  
  1872. Format of entry point record:
  1873. Offset    Size    Description
  1874.  00h    DWORD    -> array of jumps
  1875.  04h    WORD    offset of function to retrieve entry point
  1876.  06h  2 BYTEs    signature "Pe"
  1877.  08h    WORD    offset of function to set entry point
  1878.  0Ah  2 BYTEs    signature "nD"
  1879.  0Ch    WORD    offset of function to clear entry point
  1880.  0Eh    WORD    signature "OS"
  1881.  
  1882. Call function to retrieve entry point with:
  1883.     AX = index of entry point (0-9)
  1884. Return: CF clear if successful
  1885.         DX:AX -> desired entry point
  1886.     CF set on error (AX out of range)
  1887.  
  1888. Call function to set entry point with:
  1889.     AX = index of entry point (0-9)
  1890.     DX:SI -> new handler
  1891. Return: CF clear if successful
  1892.     CF set on error (AX out of range)
  1893.  
  1894. Call function to clear entry point with:
  1895.     AX = index of entry point (0-9)
  1896. Return: CF clear if successful
  1897.     CF set on error (AX out of range)
  1898. Note:    resets the jump at the specified entry point to its default target,
  1899.       which simply returns
  1900. --------N-214402-----------------------------
  1901. INT 21 U - LAN Manager - TCPDRV.DOS - API
  1902.     AX = 4402h
  1903.     BX = file handle referencing device "TCPDRV$"
  1904.     CX = 0019h
  1905.     DS:DX -> buffer containing request block
  1906. Return: CF clear if successful
  1907.         buffer filled
  1908.     CF set on error
  1909.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1910. Program: TCPDRV.DOS is the low-level device driver supporting LAN Manager's
  1911.       TCP/IP protocol stack
  1912.  
  1913. Format of request block:
  1914. Offset    Size    Description
  1915.  00h    BYTE    (call) function number
  1916.         00h initialize ???
  1917.         06h get ???
  1918.         07h get ???
  1919.  01h    BYTE    (call) 00h
  1920.         (return) error code if error, unchanged if successful
  1921.  02h    WORD    signature 4354h ('CT')
  1922. ---function 00h---
  1923.  04h    DWORD    (call) pointer to ??? FAR function
  1924.         function is called with ES:BX -> device driver request used to
  1925.           invoke this function
  1926.  08h  4 BYTEs    ???
  1927.  0Ch    DWORD    (call) pointer to ??? record, WORD at offset 22h is read
  1928.  10h    DWORD    (return) -> ??? buffer if 0000h:0000h on call
  1929. ---function 06h---
  1930.  04h  4 BYTEs    ???
  1931.  08h    DWORD    (return) pointer to ???
  1932. ---function 07h---
  1933.  04h    DWORD    (return) pointer to ??? record
  1934. --------y-214402-----------------------------
  1935. INT 21 U - PC Tools 9 CPRLOW.EXE - GET CODE AND DATA ADDRESSES
  1936.     AX = 4402h
  1937.     BX = file handle referencing device "RECLOWLD"
  1938.     DS:DX -> buffer for address list (see below)
  1939.     CX ignored
  1940. Return: CF clear if successful
  1941.         buffer filled
  1942.     CF set on error
  1943.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1944.  
  1945. Format of address list:
  1946. Offset    Size    Description
  1947.  00h    WORD    segment of CPRLOW code
  1948.  02h    WORD    offset in code segment of ??? entry point
  1949.         (switches into protected mode)
  1950.  04h    WORD    offset in code segment of jump array (see below)
  1951.  06h    WORD    segment of copy of interrupt vector table at CPRLOW load time
  1952. Note:    neither the entry point nor the jump array is valid until after a
  1953.       CPR /LOAD, because CPR.EXE installs the code into CPRLOW at runtime.
  1954.  
  1955. Format of jump array:
  1956. Offset    Size    Description
  1957.  00h  3 BYTEs    initialize CPRLOW interrupt hooks
  1958.  03h  3 BYTEs    reset timers and enable CPR (hotkey enable)
  1959.  06h  3 BYTEs    disable CPR (hotkey disable)
  1960.  09h  3 BYTEs    clear ??? flag, hotkey disable, and ???
  1961.  0Ch  3 BYTEs    initialize delay loop counter (destroys AX,BX,CX,DX)
  1962.  0Fh  3 BYTEs    disable CPR completely (commandline /DISABLE)
  1963.  12h  3 BYTEs    enable ??? if CPR enabled by both cmdline and hotkey
  1964.  15h  3 BYTEs    enable CPR (commandline /ENABLE)
  1965. --------D-214403-----------------------------
  1966. INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL
  1967.     AX = 4403h
  1968.     BX = file handle referencing character device
  1969.     CX = number of bytes to write
  1970.     DS:DX -> data to write
  1971. Return: CF clear if successful
  1972.         AX = number of bytes actually written
  1973.     CF set on error
  1974.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1975. Notes:    format of data is driver-specific (see below for some specific cases)
  1976.     if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03)
  1977.       KEYSTACK.SYS driver will push the specified characters on the
  1978.       keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS
  1979.       driver will push the characters onto the keyboard stack
  1980. SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh
  1981. SeeAlso: INT 2F/AX=D44Fh
  1982. --------c-214403-----------------------------
  1983. INT 21 - SMARTDRV.SYS v3.x only - IOCTL - CACHE CONTROL
  1984.     AX = 4403h
  1985.     BX = handle for device "SMARTAAR"
  1986.     CX = number of bytes to write
  1987.     DS:DX -> SMARTDRV control block (see below)
  1988. Return: CF clear if successful
  1989.         AX = number of bytes actually written
  1990.            = 0000h if control block too small for given command
  1991.     CF set on error
  1992.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  1993. SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  1994.  
  1995. Format of SMARTDRV control block:
  1996. Offset    Size    Description
  1997.  00h    BYTE    function code
  1998.         00h flush cache
  1999.         01h flush and discard cache
  2000.         02h disable caching (flushes and discards cache first)
  2001.         03h enable caching
  2002.         04h control write caching
  2003.         05h set flushing tick count
  2004.         06h lock cache contents
  2005.         07h unlock cache contents
  2006.         08h set flush-on-reboot flag
  2007.         09h unused
  2008.         0Ah control full-track caching
  2009.         0Bh reduce cache size
  2010.         0Ch increase cache size
  2011.         0Dh set INT 13 chain address
  2012. ---function 04h---
  2013.  01h    BYTE    write caching control action
  2014.         00h turn off write-through
  2015.         01h turn on write-through
  2016.         02h turn off write buffering (also flushes cache)
  2017.         03h turn on write buffering (also flushes cache)
  2018. ---function 05h---
  2019.  01h    WORD    number of timer ticks between cache flushes
  2020. ---function 08h---
  2021.  01h    BYTE    new flush-on-reboot flag (00h off, 01h on)
  2022. ---function 0Ah---
  2023.  01h    BYTE    full-track writes are
  2024.         00h not cached
  2025.         01h cached
  2026. ---functions 0Bh,0Ch---
  2027.  01h    WORD    number of 16K pages by which to increase/reduce cache size
  2028. ---function 0Dh---
  2029.  01h    DWORD    new address to which to chain on INT 13
  2030. Note:    the previous address is not preserved
  2031. --------d-214403-----------------------------
  2032. INT 21 - CD-ROM device driver - IOCTL OUTPUT
  2033.     AX = 4403h
  2034.     BX = file handle referencing character device for CD-ROM driver
  2035.     CX = number of bytes to write
  2036.     DS:DX -> control block (see below)
  2037. Return: CF clear if successful
  2038.         AX = number of bytes actually written
  2039.     CF set on error
  2040.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2041. SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h
  2042.  
  2043. Format of control block:
  2044. Offset    Size    Description
  2045.  00h    BYTE    function code
  2046.         00h eject disk
  2047.         01h lock/unlock door
  2048.         02h reset drive
  2049.         03h control audio channel
  2050.         04h write device control string
  2051.         05h close tray
  2052. ---functions 00h,02h,05h---
  2053.  no further fields
  2054. ---function 01h---
  2055.  01h    BYTE    lock function
  2056.         00h unlock door
  2057.         01h lock door
  2058. ---function 03h---
  2059.  01h    BYTE    input channel (0-3) for output channel 0
  2060.  02h    BYTE    volume for output channel 0
  2061.  03h    BYTE    input channel (0-3) for output channel 1
  2062.  04h    BYTE    volume for output channel 1
  2063.  05h    BYTE    input channel (0-3) for output channel 2
  2064.  06h    BYTE    volume for output channel 2
  2065.  07h    BYTE    input channel (0-3) for output channel 3
  2066.  08h    BYTE    volume for output channel 3
  2067. Note:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  2068.       right prime; a volume of 00h is off
  2069. ---function 04h---
  2070.  01h  N BYTEs    bytes to send directly to the CD-ROM drive without
  2071.         interpretation
  2072. --------d-214403-----------------------------
  2073. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  2074.     AX = 4403h
  2075.     BX = handle for device "SCSITAPE"
  2076.     CX = number of bytes to write
  2077.     DS:DX -> SCSITAPE control block (see below)
  2078. Return: CF clear if successful
  2079.         AX = number of bytes actually written
  2080.     CF set on error
  2081.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2082. SeeAlso: AX=4405h"ST-01",INT 78/AH=10h
  2083.  
  2084. Format of SCSITAPE control block:
  2085. Offset    Size    Description
  2086.  00h    WORD    command type
  2087.         'F' Format (argument 1 = interleave, argument 2 = format type)
  2088.         'E' Erase
  2089.         'R' Rewind
  2090.         'L' Load
  2091.         'N' No Load
  2092.         'S' Space (argument 1 = count, argument 2 = type)
  2093.         'M' File Mark (argument 1 = count)
  2094.         'A' Reassign
  2095.  02h    WORD    argument 1
  2096.  04h    WORD    argument 2
  2097.  06h    WORD    segment of command buffer
  2098.  08h    WORD    offset of command buffer
  2099.  0Ah    WORD    length of command buffer
  2100. --------E-214403-----------------------------
  2101. INT 21 U - AI Architects - OS/x86??? - API
  2102.     AX = 4403h
  2103.     BX = handle for device "AIA_OS"
  2104.     CX = number of bytes to write (ignored)
  2105.     DS:DX -> 12-byte buffer, first byte is command:
  2106.             81h installation check
  2107.             82h get API entry point
  2108.             84h uninstall
  2109. Return: CF clear if successful
  2110.         AX = number of bytes actually written
  2111.     CF set on error
  2112.         AX = error code (01h,05h,06h,0Ch,0Dh) (see AH=59h)
  2113. Notes:    these functions are only available if the DOS extender was loaded as a
  2114.       device driver in CONFIG.SYS
  2115.     called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86)
  2116. SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h
  2117. Index:    installation check;OS/x86|entry point;OS/x86|uninstall;OS/x86
  2118.  
  2119. Format of buffer on return:
  2120. Offset    Size    Description
  2121.  00h  4 BYTEs    signature "IABH"
  2122. ---if func 81h---
  2123.  (no additional fields)
  2124. ---if func 82h---
  2125.  04h    DWORD    pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h)
  2126. ---if func 84h---
  2127.  04h    WORD    success indicator
  2128.  06h    WORD    segment of ???
  2129.  08h    WORD    segment of ??? memory block to free if nonzero
  2130.  0Ah    WORD    segment of ??? memory block to free if nonzero
  2131. --------V-214403-----------------------------
  2132. INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION???
  2133.     AX = 4403h
  2134.     BX = file handle for device "PGS1600$"
  2135.     CX = 0018h (size of buffer)
  2136.     DS:DX -> configuration buffer (see AX=4402h"PGS1600")
  2137. Return: CF clear if successful
  2138.         AX = number of bytes actually written
  2139.     CF set on error
  2140.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2141. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  2142.       display adapter, which provides a 1600x1200 monochrome display as
  2143.       well as one of two emulations, MDA or CGA.
  2144. SeeAlso: AX=4402h"PGS1600"
  2145. --------N-214403-----------------------------
  2146. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  2147.     AX = 4403h
  2148.     BX = file handle referencing device "$IPCUST"
  2149.     CX, DS:DX ignored
  2150. Return: CF clear if successful
  2151.         AX destroyed
  2152.     CF set on error
  2153.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2154. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  2155.       version 2.05.     If less than the entire data is read or written,
  2156.       the next read/write continues where the previous one ended; this
  2157.       call and AX=4402h both reset the location at which the next
  2158.       operation starts to zero
  2159.     v2.1+ uses a new configuration method, but allows the installation
  2160.       of IPCUST.SYS for backward compatibility with other software which
  2161.       must read the PC/TCP configuration
  2162. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4402h"IPCUST"
  2163. --------V-214403-----------------------------
  2164. INT 21 - Compaq AG1024.SYS - CPQ_MGES - IOCTL OUTPUT
  2165.     AX = 4403h
  2166.     BX = file handle referencing device "CPQ_MGES"
  2167.     DS:DX -> request packet (see below)
  2168.     CX ignored
  2169. Return: CF clear if successful
  2170.         AX destroyed
  2171.         data buffer filled (if applicable)
  2172.         first word of request packet set to number of bytes of data
  2173.           available (amount returned is smaller of this and requested
  2174.           amount)
  2175.     CF set on error
  2176.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2177. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  2178. SeeAlso: AX=4403h"RGDI"
  2179.  
  2180. Format of request packet:
  2181. Offset    Size    Description
  2182.  00h    WORD    function
  2183.         0000h get ??? (26h bytes)
  2184.         0001h get ??? (36h bytes)
  2185.         0002h set ??? (same as returned by function 0001h)
  2186.         0003h get ??? (6 bytes)
  2187.         0004h get ???
  2188.         0005h get ???
  2189.         0006h get ??? (10h bytes)
  2190.         0007h set ??? (same as returned by function 0006h)
  2191. ---functions 00h-03h,06h,07h---
  2192.  02h    WORD    size of data buffer
  2193.  04h    DWORD    -> buffer for function's data
  2194.  ---functions 04h,05h---
  2195.  02h    WORD    ???
  2196.  04h    WORD    size of data buffer
  2197.  06h    DWORD    -> buffer to receive data
  2198. --------V-214403-----------------------------
  2199. INT 21 - Compaq AG1024.SYS - RGDI - IOCTL OUTPUT
  2200.     AX = 4403h
  2201.     BX = file handle referencing device "$$$$RGDI"
  2202.     DS:DX -> request packet (see below)
  2203.     CX ignored
  2204. Return: CF clear if successful
  2205.         AX destroyed
  2206.         data buffer filled (if applicable)
  2207.         first word of request packet set to number of bytes of data
  2208.           available (amount returned is smaller of this and requested
  2209.           amount)
  2210.     CF set on error
  2211.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2212. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  2213. SeeAlso: AX=4402h"RGDI",AX=4403h"CPQ_MGES"
  2214.  
  2215. Format of request packet:
  2216. Offset    Size    Description
  2217.  00h    WORD    function
  2218.         0000h get entry points
  2219.         0001h get ???
  2220.  02h    DWORD    address of buffer for returned data
  2221. --------m-214403SF01-------------------------
  2222. INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX OFF
  2223.     AX = 4403h subfn 01h
  2224.     BX = handle for device "386MAX$$"
  2225.     DS:DX -> BYTE 01h
  2226.     CX ignored
  2227. Return: DS:DX -> BYTE status (00h = successful)
  2228.     CF clear if successful
  2229.         AX destroyed
  2230.     CF set on error
  2231.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2232. Note:    this function will fail if any EMS or UMBs are in use
  2233. SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=05h
  2234. --------m-214403SF02-------------------------
  2235. INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX ON
  2236.     AX = 4403h subfn 02h
  2237.     BX = handle for device "386MAX$$"
  2238.     DS:DX -> BYTE 02h
  2239.     CX ignored
  2240. Return: DS:DX -> BYTE status (00h = successful)
  2241.     CF clear if successful
  2242.         AX destroyed
  2243.     CF set on error
  2244.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2245. SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
  2246. --------m-214403SF03-------------------------
  2247. INT 21 U - Qualitas 386MAX v6.01+ - SET STATE
  2248.     AX = 4403h subfn 03h
  2249.     BX = handle for device "386MAX$$"
  2250.     CX = number of bytes to copy (up to size of state buffer)
  2251.     DS:DX -> BYTE 03h followed by state buffer (see AX=4402h"386MAX")
  2252. Return: CF clear if successful
  2253.         AX = number of bytes actually written
  2254.     CF set on error
  2255.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2256. Note:    the first byte of the buffer must be either 01h, 02h, or 03h
  2257.       (specifying the version of the state record) and the buffer must
  2258.       contain CX bytes AFTER the initial byte
  2259. SeeAlso: AX=4402h"386MAX"
  2260. --------m-214403SF05-------------------------
  2261. INT 21 U - Qualitas 386MAX v7.00+ - LIMIT AUTOMATIC ACTIVATION TO STD EMS CALLS
  2262.     AX = 4403h subfn 05h
  2263.     BX = handle for device "386MAX$$"
  2264.     DS:DX -> BYTE 05h
  2265.     CX ignored
  2266. Return: CF clear if successful
  2267.         AX destroyed
  2268.     CF set on error
  2269.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2270. Desc:    specifies that 386MAX will only shift from AUTO to ON mode on standard
  2271.       EMS calls INT 67/AH=40h-5Dh
  2272. SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=06h
  2273. --------m-214403SF06-------------------------
  2274. INT 21 U - Qualitas 386MAX v7.00+ - ALLOW AUTOMATIC ACTIVATION ON ANY INT 67
  2275.     AX = 4403h subfn 06h
  2276.     BX = handle for device "386MAX$$"
  2277.     DS:DX -> BYTE 06h
  2278.     CX ignored
  2279. Return: CF clear if successful
  2280.         AX destroyed
  2281.     CF set on error
  2282.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2283. Desc:    specified that 386MAX should shift from AUTO to ON mode on any INT 67
  2284.       call other than INT 67/AH=3Fh
  2285. SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
  2286. --------n-214403-----------------------------
  2287. INT 21 U - PenDOS PENDEV.SYS - ???
  2288.     AX = 4403h
  2289.     BX = file handle for device "$$PENDOS" or "$$PD_REG"
  2290.     CX = size of buffer
  2291.     DS:DX -> buffer containing ???
  2292. Return: CF clear if successful
  2293.         buffer filled
  2294.     CF set on error
  2295.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2296. Program: A limited version of PenDOS by Communication Intelligence Corporation,
  2297.       which provides pen capability to keyboard-based programs, is bundled
  2298.       with IBM DOS 6.1
  2299. Note:    this call sets the WORD at offset 1Ah into the device driver request
  2300.       header used to call the driver to 0000h.
  2301. SeeAlso: AX=4402h"PENDEV.SYS"
  2302. --------D-214404-----------------------------
  2303. INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL
  2304.     AX = 4404h
  2305.     BL = drive number (00h = default, 01h = A:, etc.)
  2306.     CX = number of bytes to read
  2307.     DS:DX -> buffer
  2308. Return: CF clear if successful
  2309.         AX = number of bytes actually read
  2310.     CF set on error
  2311.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2312. Note:    format of data is driver-specific
  2313. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  2314. --------d-214404-----------------------------
  2315. INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER
  2316.     AX = 4404h
  2317.     BL = drive number (00h = default, 01h = A:, etc.)
  2318.     CX = 0004h
  2319.     DS:DX -> DWORD buffer to receive device driver address
  2320. Note:    In addition to returning the address of the Stacker device driver,
  2321.       this call also sets the volume number at offset 3Eh in the device
  2322.       driver (see INT 25/AX=CDCDh)
  2323. SeeAlso: INT 25/AX=CDCDh
  2324. --------d-214404-----------------------------
  2325. INT 21 - Stacker - GET STACVOL FILE SECTORS
  2326.     AX = 4404h
  2327.     BL = drive number (0 is current drive)
  2328.     CX = byte count (i.e., 200h = 1 sector)
  2329.     DS:DX -> buffer (see below)
  2330. Return: Data Buffer contains the number of sectors requested from the
  2331.       STACVOL physical file for the drive specified.
  2332.  
  2333. Format of stacker buffer:
  2334. Offset    Size    Description
  2335.  00h    WORD    01CDh
  2336.  02h    WORD    sector count
  2337.  04h    DWORD    number of starting sector
  2338.  08h    DWORD    far pointer to Data Buffer
  2339. --------d-214404-----------------------------
  2340. INT 21 - DUBLDISK.SYS v2.6 - GET INFO
  2341.     AX = 4404h
  2342.     BL = drive number of DoubleDisk drive (00h = default, 01h = A:, etc.)
  2343.     CX = number of bytes (000Ah-0014h, call ignored otherwise)
  2344.     DS:DX -> data record (see below)
  2345. Return: CF clear if successful
  2346.         AX = number of bytes read
  2347.     CF set on error
  2348.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2349. Program: DUBLDISK.SYS is the device driver portion of DoubleDisk, a disk
  2350.       expander by Vertisoft Systems, Inc.
  2351. Note:    the installation check consists of scanning memory for the signature
  2352.       "FAT 2.6  byte:", which is immediately followed by a data table
  2353. SeeAlso: AX=440Dh
  2354. Index:    installation check;DUBLDISK.SYS
  2355.  
  2356. Format of data record:
  2357. Offset    Size    Description
  2358.  00h    WORD    (call) signature 4444h
  2359.  02h    BYTE    (call) function
  2360.             00h ???
  2361.             01h ???
  2362. ---function 00h---
  2363.  02h    BYTE    (return) ???
  2364.  03h    BYTE    (return) ???
  2365. ---function 01h---
  2366.  02h    WORD    (return) 4444h
  2367.  04h    WORD    allocation unit size???
  2368.  06h    WORD    ???
  2369.  08h    WORD    ???
  2370.  0Ah    BYTE    ???
  2371.  
  2372. Format of signature data table:
  2373. Offset    Size    Description
  2374.  00h  5 BYTEs    ???
  2375.  05h    BYTE    first drive number
  2376.  06h    BYTE    number of drives
  2377.  07h    ???
  2378. --------d-214404-----------------------------
  2379. INT 21 - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  2380.     AX = 4404h
  2381.     BL = drive number (00h = default, 01h = A:, etc)
  2382.     CX = 000Ah (size of DSPACKET structure)
  2383.     DS:DX -> DSPACKET structure (see below)
  2384. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  2385.         AX = number of bytes actually transferred
  2386.     CF set on error
  2387.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2388. SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  2389.  
  2390. Format of DSPACKET structure:
  2391. Offset    Size    Description
  2392.  00h    WORD    signature 444Dh ("DM")
  2393.  02h    BYTE    command code
  2394.         46h ('F') flush internal caches
  2395.         49h ('I') flush and invalidate internal caches
  2396.  03h    WORD    result code
  2397.         (return) 4F4Bh ("OK") if successful, else unchanged
  2398.  05h  5 BYTEs    padding
  2399. --------d-214404-----------------------------
  2400. INT 21 - DBLSPACE.BIN 6.2 - IOCTL - GET ??? FOR SPECIFIED DRIVE
  2401.     AX = 4404h
  2402.     BL = drive number (00h = default, 01h = A:, etc)
  2403.     CX = size of DSPACKET structure (ignored in DOS 6.2)
  2404.     DS:DX -> DSPACKET structure (see below)
  2405. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  2406.         AX = number of bytes actually transferred
  2407.     CF set on error
  2408.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2409. SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  2410.  
  2411. Format of DSPACKET structure:
  2412. Offset    Size    Description
  2413.  00h    WORD    signature 444Dh ("DM")
  2414.  02h    BYTE    command code
  2415.         53h ('S') get ??? for specified drive
  2416.  03h    WORD    result code
  2417.         (return) 4F4Bh ("OK") if successful, else unchanged
  2418.  05h    DWORD    (return) pointer to 96-byte ??? data
  2419.  09h    DWORD    (return) pointer to ??? data
  2420.  0Dh  3 BYTEs    reserved
  2421. --------d-214404-----------------------------
  2422. INT 21 U - xDISK v3.31 - CONFIGURE
  2423.     AX = 4404h
  2424.     BL = drive number (00h = default, 01h = A:, etc)
  2425.     CX = 0047h (length of version string)
  2426.     DS:DX -> 79-byte buffer for version string and ???
  2427.     DS:0081h = commandline containing new switches for driver
  2428. Return: CF clear if successful
  2429.         AX = number of bytes actually transferred
  2430.     CF set on error
  2431.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2432. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  2433. SeeAlso: AX=4405h"xDISK",INT 2F/AH=DDh"xDISK"
  2434. --------c-214404-----------------------------
  2435. INT 21 - COMBI-disk v1.13 - GET DATA RECORD
  2436.     AX = 4404h
  2437.     BL = drive number (00h = default, 01h = A:, etc)
  2438.     CX =  (length of data packet)
  2439.     DS:DX -> buffer for data packet (see below)
  2440. Return: CF clear if successful
  2441.         AX = number of bytes actually transferred
  2442.     CF set on error
  2443.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2444. Program: COMBI-disk is a shareware combination cache and RAMdisk sharing a
  2445.       single pool of memory by Vadim V. Vlasov
  2446. Note:    the installation check consists of scanning the valid drives for one
  2447.       which returns a correctly-sized data packet with the proper
  2448.       signature in the first field
  2449. SeeAlso: AX=4405h"COMBI"
  2450. Index:    installation check;COMBI-disk
  2451.  
  2452. Format of data packet:
  2453. Offset    Size    Description
  2454.  00h  6 BYTEs    ASCIZ signature "COMBI"
  2455.  06h    WORD    version (high byte = major, low = decimal minor version)
  2456.  08h    BYTE    current options (see below)
  2457.  09h    BYTE    sectors per allocation block
  2458.  0Ah    WORD    maximum buffer in KB
  2459.  0Ch    WORD    current buffer in KB (less than max if XMS memory being lent)
  2460.  0Eh    WORD    total number of allocation blocks
  2461.  10h    WORD    current number of allocation blocks
  2462.  12h    WORD    number of blocks being used by RAM disk
  2463.  14h    WORD    number of blocks being used by cache or unused
  2464.  16h    WORD    number of dirty cache blocks
  2465.  18h    WORD    number of blocks which could not be written out due to errors
  2466.  1Ah    WORD    total number of read requests
  2467.  1Ch    WORD    total number of sectors read
  2468.  1Eh    WORD    number of BIOS read requests (cache misses)
  2469.  20h    WORD    number of sectors read via BIOS (cache misses)
  2470.  22h    WORD    total number of write requests
  2471.  24h    WORD    total number of sectors written
  2472.  26h    WORD    number of BIOS write requests
  2473.  28h    WORD    number of sectors written via BIOS
  2474.  2Ah    WORD    number of RAM disk read requests
  2475.  2Ch    WORD    number of sectors read from RAM disk
  2476.  2Eh    WORD    number of RAM disk write requests
  2477.  30h    WORD    number of sectors written to RAM disk
  2478. --------D-214405-----------------------------
  2479. INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL
  2480.     AX = 4405h
  2481.     BL = drive number (00h = default, 01h = A:, etc)
  2482.     CX = number of bytes to write
  2483.     DS:DX -> data to write
  2484. Return: CF clear if successful
  2485.         AX = number of bytes actually written
  2486.     CF set on error
  2487.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2488. Note:    format of data is driver-specific
  2489. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  2490. --------d-214405-----------------------------
  2491. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  2492.     AX = 4405h
  2493.     BX = drive number (00h = default, 01h = A:, etc)
  2494.     CX = number of bytes to write
  2495.     DS:DX -> SCSIDISK control block (see AX=4403h"ST-01")
  2496. Return: CF clear if successful
  2497.         AX = number of bytes actually written
  2498.     CF set on error
  2499.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2500. SeeAlso: AX=4403h"ST-01"
  2501. --------d-214405-----------------------------
  2502. INT 21 U - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  2503.     AX = 4405h
  2504.     BL = drive number (00h = default, 01h = A:, etc)
  2505.     CX = 000Ah (size of DSPACKET structure)
  2506.     DS:DX -> DSPACKET structure (see below)
  2507. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  2508.         AX = number of bytes actually transferred
  2509.     CF set on error
  2510.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2511. Note:    this call is identical to the documented AX=4404h
  2512. SeeAlso: AX=4404h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  2513.  
  2514. Format of DSPACKET structure:
  2515. Offset    Size    Description
  2516.  00h    WORD    signature 444Dh ("DM")
  2517.  02h    BYTE    command code
  2518.         46h ('F') flush internal caches
  2519.         49h ('I') flush and invalidate internal caches
  2520.  03h    WORD    result code
  2521.         (return) 4F4Bh ("OK") if successful, else unchanged
  2522.  05h  5 BYTEs    padding
  2523. --------d-214405-----------------------------
  2524. INT 21 U - xDISK v3.31 - ???
  2525.     AX = 4405h
  2526.     BL = drive number (00h = default, 01h = A:, etc)
  2527.     CX = number of bytes to write
  2528.     DS:DX -> buffer containing version string
  2529.     ???
  2530. Return: CF clear if successful
  2531.         AX = number of bytes actually transferred
  2532.     CF set on error
  2533.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2534. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  2535. SeeAlso: AX=4404h"xDISK",INT 2F/AH=DDh"xDISK"
  2536. --------d-214405-----------------------------
  2537. INT 21 - COMBI-disk v1.13 - CONTROL COMBI-disk
  2538.     AX = 4405h
  2539.     BL = drive number (00h = default, 01h = A:, etc) for RAM disk
  2540.     CX = number of bytes to write
  2541.     DS:DX -> buffer containing command packet (see below)
  2542. Return: CF clear if successful
  2543.         AX = number of bytes actually transferred
  2544.     CF set on error
  2545.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2546. SeeAlso: AX=4404h"COMBI"
  2547.  
  2548. Format of command packet:
  2549. Offset    Size    Description
  2550.  00h    WORD    version
  2551.  02h    BYTE    command code
  2552.         80h flush cache
  2553.         81h change options byte
  2554.         82h shrink memory
  2555.         83h expand memory
  2556.         84h get dirty block information
  2557.         85h reset write errors
  2558.         86h reset counters
  2559. ---command code 81h---
  2560.  03h    BYTE    new options byte (see below)
  2561. ---command code 82h---
  2562.  03h    WORD    number of KB to release
  2563. ---command code 83h---
  2564.  03h    WORD    number of KB to expand
  2565. ---command code 84h---
  2566.  03h    DWORD    -> buffer for block info (see below)
  2567. ---command code 85h---
  2568.  03h    DWORD    block ID
  2569. ---command code 86h---
  2570.  03h    BYTE    which counters to reset
  2571.         bit 0: hard disk read counts
  2572.         bit 1: hard disk write counts
  2573.         bit 2: RAM disk read/write counts
  2574. Note:    multiple commands may be placed in a single packet by stringing
  2575.       together as many command/argument pairs as desired
  2576.  
  2577. Bitfields for options byte:
  2578.  bit 0    cache off
  2579.  bit 1    cache frozen
  2580.  bit 2    write caching enabled
  2581.  bit 3    delayed writing disabled
  2582.  bit 5    fix memory allocation (no XMS lending)
  2583.  bit 6    no 'sector not found' error
  2584.  
  2585. Format of block info:
  2586. Offset    Size    Description
  2587.  00h    DWORD    block ID
  2588.  04h    BYTE    bitmask of valid sectors in block
  2589.  05h    BYTE    bitmask of dirty sectors in block
  2590.  06h    BYTE    last error returned by BIOS
  2591.  07h    BYTE    number of errors
  2592. --------D-214406-----------------------------
  2593. INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
  2594.     AX = 4406h
  2595.     BX = file handle
  2596. Return: CF clear if successful
  2597.         AL = input status
  2598.         00h not ready (device) or at EOF (file)
  2599.         FFh ready
  2600.     CF set on error
  2601.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2602. Note:    files may not register as being at EOF if positioned there by AH=42h
  2603. SeeAlso: AX=4407h,INT 2F/AX=122Bh
  2604. --------D-214407-----------------------------
  2605. INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
  2606.     AX = 4407h
  2607.     BX = file handle
  2608. Return: CF clear if successful
  2609.         AL = input status
  2610.         00h not ready
  2611.         FFh ready
  2612.     CF set on error
  2613.         AX = error code (01h,05h,06h,0Dh) (see AH=59h)
  2614. Note:    for DOS 2+, files are always ready for output, even if the disk is
  2615.       full or no media is in the drive
  2616. SeeAlso: AX=4406h,INT 2F/AX=122Bh
  2617. --------D-214408-----------------------------
  2618. INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE
  2619.     AX = 4408h
  2620.     BL = drive number (00h = default, 01h = A:, etc)
  2621. Return: CF clear if successful
  2622.         AX = 0000h if removable
  2623.            = 0001h if fixed
  2624.     CF set on error
  2625.         AX = error code (01h,0Fh) (see AH=59h)
  2626. SeeAlso: AX=4400h,AX=4409h,INT 2F/AX=122Bh
  2627. --------D-214409-----------------------------
  2628. INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE
  2629.     AX = 4409h
  2630.     BL = drive number (00h = default, 01h = A:, etc)
  2631. Return: CF clear if successful
  2632.         DX = device attribute word
  2633.         bit 15: drive is SUBSTituted
  2634.         bit 12: drive is remote
  2635.         bit  9: direct I/O not allowed
  2636.     CF set on error
  2637.         AX = error code (01h,0Fh) (see AH=59h)
  2638. Note:    on local drives, DX bits not listed above are the attribute word from
  2639.       the device driver header (see AH=52h); for remote drives, the other
  2640.       bits appear to be undefined for DOS versions prior to 5.0 (they are
  2641.       all cleared in DOS 5+)
  2642. SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
  2643. --------D-21440A-----------------------------
  2644. INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE
  2645.     AX = 440Ah
  2646.     BX = handle
  2647. Return: CF clear if successful
  2648.         DX = attribute word (as stored in SFT)
  2649.         bit 15: set if remote
  2650.         bit 14: date/time not set on close
  2651.     CF set on error
  2652.         AX = error code (01h,06h) (see AH=59h)
  2653. Notes:    if file is remote, Novell Advanced NetWare 2.0 returns the number of
  2654.       the file server on which the handle is located in CX
  2655.     DR-DOS 3.41 and 5.0 clear all bits of DX except bit 15
  2656. SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh
  2657. --------D-21440B-----------------------------
  2658. INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT
  2659.     AX = 440Bh
  2660.     CX = pause between retries (default 1)
  2661.     DX = number of retries (default 3)
  2662. Return: CF clear if successful
  2663.     CF set on error
  2664.         AX = error code (01h) (see AH=59h)
  2665. Notes:    delay is dependent on processor speed (value in CX specifies number of
  2666.       64K-iteration empty loops to execute)
  2667.     if DX=0000h on entry, the retry count is left unchanged
  2668. SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
  2669. --------D-21440C-----------------------------
  2670. INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
  2671.     AX = 440Ch
  2672.     BX = device handle
  2673.     CH = category code
  2674.         00h unknown (DOS 3.3+)
  2675.         01h COMn: (DOS 3.3+)
  2676.         03h CON (DOS 3.3+)
  2677.         05h LPTn:
  2678.         9Eh Media Access Control driver (STARLITE)
  2679.         00h-7Fh reserved for Microsoft
  2680.         80h-FFh reserved for OEM/user-defined
  2681.     CL = function
  2682.         00h MAC driver Bind (STARLITE)
  2683.         45h set iteration (retry) count
  2684.         4Ah select code page
  2685.         4Ch start code-page preparation
  2686.         4Dh end code-page preparation
  2687.         5Fh set display information (DOS 4+)
  2688.         65h get iteration (retry) count
  2689.         6Ah query selected code page
  2690.         6Bh query prepare list
  2691.         7Fh get display information (DOS 4+)
  2692.     DS:DX -> parameter block (see below)
  2693.     SI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  2694.     DI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  2695. Return: CF set on error
  2696.         AX = error code (see AH=59h)
  2697.     CF clear if successful
  2698.         DS:DX -> iteration count if CL=65h
  2699.         SI = returned value (European MS-DOS 4.0, OS/2 comp box)
  2700.         DI = returned value (European MS-DOS 4.0, OS/2 comp box)
  2701. Notes:    bit assignments for function code in CL:
  2702.         bit 7: set to ignore if unsupported, clear to return error
  2703.         bit 6: set if passed to driver, clear if intercepted by DOS
  2704.         bit 5: set if queries data from device, clear if sends command
  2705.         bits 4-0: subfunction
  2706.     DR-DOS 3.41 and 5.0 return error code 16h on CL=45h,65h if the device
  2707.       does not support a retry counter
  2708. SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=14FFh
  2709. SeeAlso: INT 2F/AX=1A01h
  2710.  
  2711. Format of parameter block for function 00h:
  2712. Offset    Size    Description
  2713.  00h  8 BYTEs    ASCIZ signature "STARMAC"
  2714.  08h    WORD    version
  2715.  0Ah    WORD    flags
  2716.         bit 0: media requires connect or listen request before use
  2717.         bit 1: network is a LAN (broadcast/multicast supported)
  2718.         bit 2: point-to-point network
  2719.  0Ch    WORD    handle for use with MAC driver's private interface (filled in
  2720.         by MAC driver)
  2721.  0Eh    WORD    context
  2722.  10h    WORD    approximate speed in KB/sec (filled in by MAC driver)
  2723.  12h    WORD    approximate cost in cents per hour (filled in by MAC driver)
  2724.  14h    WORD    maximum packet size in bytes (filled in by MAC driver)
  2725.  16h    WORD    addressing format (filled in by MAC driver)
  2726.         0000h general addressing
  2727.         0001h Ethernet addressing
  2728.         0002h Token Ring addressing
  2729.         0003h Token Bus addressing
  2730.  18h    DWORD    Send entry point (filled in by MAC driver)
  2731.  1Ch    DWORD    RegisterEventHandler entry point (filled in by MAC driver)
  2732.  20h    DWORD    SetPacketFilter entry point (filled in by MAC driver)
  2733.  24h    DWORD    UnBind entry point (filled in by MAC driver)
  2734.  
  2735. Format of parameter block for function 45h:
  2736. Offset    Size    Description
  2737.  00h    WORD    number of times output is attempted before driver assumes
  2738.         device is busy
  2739.  
  2740. Format of parameter block for functions 4Ah and 6Ah:
  2741. Offset    Size    Description
  2742.  00h    WORD    length of data
  2743.  02h    WORD    code page ID
  2744.  04h 2N BYTEs    DCBS (double byte character set) lead byte range
  2745.           start/end for each of N ranges (DOS 4.0)
  2746.     WORD    0000h  end of data (DOS 4.0)
  2747.  
  2748. Format of parameter block for function 4Ch:
  2749. Offset    Size    Description
  2750.  00h    WORD    flags
  2751.         DISPLAY.SYS = 0000h
  2752.         PRINTER.SYS bit 0 clear to prepare downloaded font, set to
  2753.             prepare cartridge selection
  2754.  02h    WORD    length of remainder of parameter block
  2755.  04h    WORD    number of code pages following
  2756.  06h  N WORDs    code page 1,...,N
  2757.  
  2758. Format of parameter block for function 4Dh:
  2759. Offset    Size    Description
  2760.  00h    WORD    length of data
  2761.  02h    WORD    code page ID
  2762.  
  2763. Format of parameter block for functions 5Fh and 7Fh:
  2764. Offset    Size    Description
  2765.  00h    BYTE    level (0 for DOS 4.x-6.0)
  2766.  01h    BYTE    reserved (0)
  2767.  02h    WORD    length of following data (14)
  2768.  04h    WORD    control flags
  2769.           bit 0 set for blink, clear for intensity
  2770.           bits 1 to 15 reserved
  2771.  06h    BYTE    mode type (1=text, 2=graphics)
  2772.  07h    BYTE    reserved (0)
  2773.  08h    WORD    colors
  2774.            0 = monochrome
  2775.            else N bits per pixel
  2776.  0Ah    WORD    pixel columns
  2777.  0Ch    WORD    pixel rows
  2778.  0Eh    WORD    character columns
  2779.  10h    WORD    character rows
  2780.  
  2781. Format of parameter block for function 6Bh:
  2782. Offset    Size    Description
  2783.  00h    WORD    length of following data
  2784.  02h    WORD    number of hardware code pages
  2785.  04h  N WORDs    hardware code pages 1,...,N
  2786.     WORD    number of prepared code pages
  2787.       N WORDs    prepared code pages 1,...,N
  2788. --------d-21440C-----------------------------
  2789. INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE
  2790.     AX = 440Ch
  2791.     BX = device handle
  2792.     CH = category code
  2793.         07h tape (ASPITAPE.SYS)
  2794.     CL = function
  2795.         01h "mtop" - perform tape operation
  2796.         02h "mtget" - get tape status
  2797.         03h ignore end-of-tape errors
  2798.         04h enable end-of-tape errors
  2799.     DS:DX -> parameter block (see below)
  2800. Return: CF set on error
  2801.         AX = error code (see AH=59h)
  2802.     CF clear if successful
  2803.         DS:DX -> data block
  2804. Notes:    This device driver is a simple DOS interface to the Adaptec Advanced
  2805.       SCSI Programming Interface (ASPI).  It provides the following device
  2806.       names as access to the SCSI tape, 'RMTx' (rewind on close) and
  2807.       'NRMTx' (NO rewind on close) where x can go from 0 to 3.  There may
  2808.       also be the following names 'MTx' and 'NMTx' which default to 1024
  2809.       byte blocks.    The names may also have a '$' appended to try and make
  2810.       them unique from file names of 'RMT0' etc.
  2811.     once opend these devices must be put into RAW mode
  2812. SeeAlso: AX=4402h"ASPI"
  2813.  
  2814. Format of mtop parameter block:
  2815. Offset    Size    Description
  2816.  00h    WORD    operation code
  2817.         00h "MTWEOF" - write an end-of-file record
  2818.         01h "MTFSF" - forward space file
  2819.         02h "MTBSF" - backward space file
  2820.         03h "MTFSR" - forward space record
  2821.         04h "MTBSR" - backward space record
  2822.         05h "MTREW" - rewind
  2823.         06h "MTOFFL" - rewind and unload
  2824.         07h "MTNOP" - perform TEST UNIT READY
  2825.  02h    DWORD    repetition count
  2826.  
  2827. Format of mtget parameter block:
  2828. Offset    Size    Description
  2829.  00h    BYTE    ASPI host ID
  2830.  01h    BYTE    SCSI target ID
  2831.  02h    BYTE    SCSI logical unit number
  2832.  03h    BYTE    device parameters
  2833.         bit 0: drive must use fixed-block read and write
  2834.         bit 7: drive is an ASPI device
  2835.  04h    BYTE    current device state (see below)
  2836.  05h    BYTE    unit number within driver
  2837.  06h    WORD    fixed block blocksize
  2838.  08h    BYTE    last SCSI status
  2839.  09h    BYTE    last SCSI sense key
  2840.  0Ah    WORD    last SCSI opcode (packed)
  2841.         bits 0-7: SCSI operation (SCSI packet byte 0)
  2842.         bits 8-10: SCSI flags (SCSI packet byte 1)
  2843.         bits 11-12: ASPI "Direction Bits" (ASPI SRB byte 3)
  2844.  0Ch    WORD    residual bytes from SCSI opcode
  2845.  
  2846. Bitfields for current device state:
  2847.  bit 0    device currently opened in buffered mode
  2848.  bit 1    drive currently opened in nonbuffered mode
  2849.  bit 2    rewind drive on last close
  2850.  bit 3    drive has been written on
  2851.  bit 4    drive has been read from
  2852.  bit 5    next read will return 0 bytes
  2853.  bit 6    EOM will resemble EOF
  2854.  bit 7    drive may be busy rewinding
  2855. --------D-21440D-----------------------------
  2856. INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
  2857.     AX = 440Dh
  2858.     BL = drive number (00h=default,01h=A:,etc)
  2859.     CH = category code
  2860.         08h disk drive
  2861.         00h-7Fh reserved for Microsoft
  2862.         80h-FFh reserved for OEM/user-defined
  2863.     CL = minor code (function) (see below)
  2864.     DS:DX -> (DOS) parameter block (see below)
  2865.     SI:DI -> (OS/2 comp box) parameter block (see below)
  2866. Return: CF set on error
  2867.         AX = error code (01h,02h) (see AH=59h)
  2868.     CF clear if successful
  2869.         DS:DX -> data block if CL=60h or CL=61h
  2870. Notes:    DOS 4.01 seems to ignore the high byte of the number of directory
  2871.       entries in the BPB for diskettes.
  2872.     functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5+
  2873.     the DUBLDISK.SYS v2.6 driver only supports minor codes 60h and 67h
  2874.     DR-DOS 3.41-6.0 only support minor codes 40h-42h and 60h-62h; all
  2875.       other minor codes return error code 16h
  2876. SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
  2877.  
  2878. Values for minor code:
  2879.  00h    (OS/2)    \ used to lock/unlock a drive
  2880.  01h    (OS/2)    /
  2881.  40h    set device parameters
  2882.  41h    write logical device track
  2883.  42h    format and verify logical device track
  2884.  46h    (DOS 4+) set volume serial number (see also AH=69h)
  2885.  47h    (DOS 4+) set access flag
  2886.  50h    (PCMCIA) attribute memory write
  2887.  51h    (PCMCIA) common memory write
  2888.  52h    (PCMCIA) force media change
  2889.  53h    (PCMCIA) erase drive
  2890.  54h    (PCMCIA) erase media
  2891.  56h    (PCMCIA) set erase status callback
  2892.  57h    (PCMCIA) append Card Information Structure (CIS) tuple
  2893.  58h    (PCMCIA) erase CIS tuples
  2894.  60h    get device parameters
  2895.  61h    read logical device track
  2896.  62h    verify logical device track
  2897.  66h    (DOS 4+) get volume serial number (see also AH=69h)
  2898.  67h    (DOS 4+) get access flag
  2899.  68h    (DOS 5+) sense media type
  2900.  70h    (PCMCIA) attribute memory read
  2901.  73h    (PCMCIA) get memory media information
  2902.  76h    (PCMCIA) get erase status callback
  2903.  77h    (PCMCIA) get first Card Information Structure (CIS) tuple
  2904.  78h    (PCMCIA) get next CIS tuple
  2905.  
  2906. Format of parameter block for functions 40h, 60h:
  2907. Offset    Size    Description
  2908.  00h    BYTE    special functions
  2909.         bit 0 set if function to use current BPB, clear if Device
  2910.             BIOS Parameter Block field contains new default BPB
  2911.         bit 1 set if function to use track layout fields only
  2912.             must be clear if CL=60h
  2913.         bit 2 set if all sectors in track same size (should be set)
  2914.         bits 3-7 reserved
  2915.  01h    BYTE    device type (see below)
  2916.  02h    WORD    device attributes
  2917.         bit 0 set if nonremovable medium
  2918.         bit 1 set if door lock ("changeline") supported
  2919.         bits 2-15 reserved
  2920.  04h    WORD    number of cylinders
  2921.  06h    BYTE    media type
  2922.         for 1.2M drive
  2923.             00h 1.2M disk (default)
  2924.             01h 320K/360K disk
  2925.         F8h for DUBLDISK.SYS v2.6 expanded drives
  2926.         always 00h for other drive types
  2927.  07h 31 BYTEs    device BPB (see AH=53h), bytes after BPB offset 1Eh omitted
  2928. ---function 40h only---
  2929.  26h    WORD    number of sectors per track (start of track layout field)
  2930.         max 63
  2931.  28h  N word pairs: number,size of each sector in track
  2932.  
  2933. Values for device type:
  2934.  00h    320K/360K disk
  2935.  01h    1.2M disk
  2936.  02h    720K disk
  2937.  03h    single-density 8-inch disk
  2938.  04h    double-density 8-inch disk
  2939.  05h    fixed disk
  2940.  06h    tape drive
  2941.  07h    (DOS 3.3+) other type of block device, normally 1.44M floppy
  2942.  08h    read/write optical disk
  2943.  09h    (DOS 5+) 2.88M floppy
  2944.  
  2945. Format of parameter block for functions 41h, 61h:
  2946. Offset    Size    Description
  2947.  00h    BYTE    special functions (reserved, must be zero)
  2948.  01h    WORD    number of disk head
  2949.  03h    WORD    number of disk cylinder
  2950.  05h    WORD    number of first sector to read/write
  2951.  07h    WORD    number of sectors
  2952.  09h    DWORD    transfer address
  2953.  
  2954. Format of parameter block for function 42h:
  2955. Offset    Size    Description
  2956.  00h    BYTE    reserved, must be zero (DOS <3.2)
  2957.           bit 0=0: format/verify track
  2958.             1: format status call (DOS 3.2+), don't actually format
  2959.           bits 1-7 reserved, must be zero
  2960.         value on return (DOS 3.3+):
  2961.           00h    specified tracks, sectors/track supported by BIOS
  2962.           01h    function not supported by BIOS
  2963.           02h    specified tracks, sectors/track not allowed for drive
  2964.           03h    no disk in drive
  2965.  01h    WORD    number of disk head
  2966.  03h    WORD    number of disk cylinder
  2967.  
  2968. Format of parameter block for function 62h:
  2969. Offset    Size    Description
  2970.  00h    BYTE    reserved, must be zero (DOS <3.2)
  2971.           bit 0=0: verify single track
  2972.             1: verify multiple tracks
  2973.           bits 1-7 reserved, must be zero
  2974.         value on return (DOS 3.3+):
  2975.           00h    specified tracks, sectors/track supported by BIOS
  2976.           01h    function not supported by BIOS
  2977.           02h    specified tracks, sectors/track not allowed for drive
  2978.           03h    no disk in drive
  2979.  01h    WORD    number of disk head
  2980.  03h    WORD    number of disk cylinder
  2981.  05h    WORD    number of tracks to verify (equivalent to 255 or fewer sectors)
  2982.  
  2983. Format of parameter block for functions 46h, 66h:
  2984. Offset    Size    Description
  2985.  00h    WORD    (call) info level (should be 0000h)
  2986.  02h    DWORD    disk serial number (binary)
  2987.  06h 11 BYTEs    volume label or "NO NAME    "
  2988.  11h  8 BYTEs    filesystem type "FAT12     " or "FAT16   " (CL=66h only)
  2989.  
  2990. Format of parameter block for functions 47h, 67h:
  2991. Offset    Size    Description
  2992.  00h    BYTE    special-function field (must be zero)
  2993.  01h    BYTE    disk-access flag, nonzero if access allowed by driver
  2994.  
  2995. Format of parameter block for function52h:
  2996.  00h    BYTE    (call) unused???
  2997.         (return) 00h if flast/ATA drive but no card inserted
  2998.             unchanged otherwise
  2999. Note:    the absense of a flash card should be tested by checking the DOS error
  3000.       code rather than the returned byte
  3001.  
  3002. Format of parameter block for function 68h:
  3003. Offset    Size    Description
  3004.  00h    BYTE    01h for default media type, 00h for any other media type
  3005.         (see also INT 13/AH=20h)
  3006.  01h    BYTE    02h for 720K, 07h for 1.44M, 09h for 2.88M
  3007. --------D-21440E-----------------------------
  3008. INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
  3009.     AX = 440Eh
  3010.     BL = drive number (00h=default,01h=A:,etc)
  3011. Return: CF set on error
  3012.         AX = error code (01h,0Fh) (see AH=59h)
  3013.     CF clear if successful
  3014.         AL = 00h block device has only one logical drive assigned
  3015.          1..26 the last letter used to reference the drive (1=A:,etc)
  3016. Note:    DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  3017.       always returns AL=00h
  3018. SeeAlso: AX=440Fh,INT 2F/AX=122Bh
  3019. --------D-21440F-----------------------------
  3020. INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
  3021.     AX = 440Fh
  3022.     BL = physical drive number (00h=default,01h=A:,etc))
  3023. Return: CF set on error
  3024.         AX = error code (01h,0Fh) (see AH=59h)
  3025.     CF clear if successful
  3026.         drive now responds to next logical drive number
  3027. Notes:    maps logical drives to physical drives, similar to DOS's treatment of
  3028.       a single physical floppy drive as both A: and B:
  3029.     DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  3030.       always returns an error on this function
  3031. SeeAlso: AX=440Eh,INT 2F/AX=122Bh
  3032. --------D-214410-----------------------------
  3033. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
  3034.     AX = 4410h
  3035.     BX = handle for device
  3036.     CH = category code (see AX=440Ch)
  3037.     CL = function code
  3038. Return: CF clear if successful
  3039.         AX = 0000h    specified IOCTL function is supported
  3040.     CF set on error
  3041.         AL = 01h    IOCTL capability not available
  3042. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  3043.       standard DOS 3.2 set may use this call first to see whether a
  3044.       particular call is supported
  3045. SeeAlso: AX=440Ch,AX=440Dh,AX=4411h
  3046. --------d-214410BXFFFF-----------------------
  3047. INT 21 U - NewSpace - ENABLE DRIVER
  3048.     AX = 4410h
  3049.     BX = FFFFh
  3050. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  3051.       all files as they are written and decompresses them as they are read
  3052. Note:    compressed files are not accessible unless the driver is enabled
  3053. SeeAlso: AX=4411h/BX=FFFFh
  3054. --------D-214411-----------------------------
  3055. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
  3056.     AX = 4411h
  3057.     BL = drive number
  3058.     CH = category code (see AX=440Dh)
  3059.     CL = function code
  3060. Return: CF clear if successful
  3061.         AX = 0000h    specified IOCTL function is supported
  3062.     CF set on error
  3063.         AL = 01h    IOCTL capability not available
  3064. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  3065.       standard DOS 3.2 set may use this call first to see whether a
  3066.       particular call is supported
  3067. SeeAlso: AX=440Ch,AX=440Dh,AX=4410h
  3068. --------d-214411BXFFFF-----------------------
  3069. INT 21 U - NewSpace - DISABLE DRIVER
  3070.     AX = 4411h
  3071.     BX = FFFFh
  3072. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  3073.       all files as they are written and decompresses them as they are read
  3074. Note:    compressed files are not accessible unless the driver is enabled
  3075. SeeAlso: AX=4410h/BX=FFFFh
  3076. --------O-214412-----------------------------
  3077. INT 21 - DR-DOS 5+ - DETERMINE DOS TYPE
  3078.     AX = 4412h
  3079.     CF set
  3080. Return: CF set if not DR-DOS
  3081.         AX = error code (see AH=59h)
  3082.     CF clear if DR-DOS
  3083.         DX = AX = version code (see AX=4452h)
  3084. Note:    this obsolete call which will not be supported in future versions of
  3085.       DR-DOS is identical to AX=4452h
  3086. SeeAlso: AX=4452h
  3087. --------d-214412BXFFFF-----------------------
  3088. INT 21 U - NewSpace - INSTALLATION CHECK???
  3089.     AX = 4412h
  3090.     BX = FFFFh
  3091. Return: AX = PSP segment of NewRes (resident driver for NewSpace)
  3092.     BX:DX -> ???
  3093.     CX = ???
  3094. SeeAlso: AX=4411h/BX=FFFFh
  3095. --------d-214413BXFFFF-----------------------
  3096. INT 21 U - NewSpace - GET ???
  3097.     AX = 4413h
  3098.     BX = FFFFh
  3099. Return: AX = code segment of NewRes (resident driver for NewSpace)
  3100.     BX = offset of ???
  3101. SeeAlso: AX=4412h/BX=FFFFh
  3102. --------O-214414-----------------------------
  3103. INT 21 U - DR-DOS 5.0 - SET GLOBAL PASSWORD
  3104.     AX = 4414h
  3105.     DS:DX -> password string (blank-padded to 8 characters)
  3106. Desc:    Specify the master password for accessing files.
  3107. Note:    this obsolete call which will not be supported in future versions of
  3108.       DR-DOS is identical to AX=4452h
  3109. SeeAlso: AX=4454h
  3110. --------d-214414BXFFFF-----------------------
  3111. INT 21 U - NewSpace - DEBUGGING DUMP
  3112.     AX = 4414h
  3113.     BX = FFFFh
  3114. Return: debugging dump written to X:\NEWSPACE.SMP
  3115. SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh
  3116. --------O-2144-------------------------------
  3117. INT 21 U - DR-DOS 5.0 - HISTORY BUFFER, SHARE, AND HILOAD CONTROL
  3118.     AH = 44h
  3119.     AL = 16h to 18h
  3120. Note:    these obsolete subfunctions (which will not be supported in future
  3121.       versions of DR-DOS) are identical to AX=4456h through 4458h
  3122. SeeAlso: AX=4456h,AX=4457h,AX=4458h
  3123. --------O-214451-----------------------------
  3124. INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
  3125.     AX = 4451h
  3126. Return: CF set if not Concurrent DOS
  3127.         AX = error code (see AH=59h)
  3128.     CF clear if successful
  3129.         AH = single-user/multiuser nature
  3130.         10h single-user
  3131.             AL = operating system version ID (see AX=4452h)
  3132.         14h multiuser
  3133.             AL = operating system version ID (see below)
  3134. Notes:    as of Concurrent DOS/XM 5.0 (possibly earlier), the version is stored
  3135.       in the environment variable VER
  3136.     use this function if you are looking for multiuser capabilities,
  3137.       AX=4452h for single-user
  3138.     this function should never return the single-user values
  3139. SeeAlso: AX=4452h,AX=4459h
  3140.  
  3141. Values for operating system version ID:
  3142.  32h    Concurrent PC DOS 3.2
  3143.  41h    Concurrent DOS 4.1
  3144.  50h    Concurrent DOS/XM 5.0 or Concurrent DOS/386 1.1
  3145.  60h    Concurrent DOS/XM 6.0 or Concurrent DOS/386 2.0
  3146.  62h    Concurrent DOS/XM 6.2 or Concurrent DOS/386 3.0
  3147.  66h    DR Multiuser DOS 5.1
  3148.  67h    Concurrent DOS 5.1
  3149. --------O-214452-----------------------------
  3150. INT 21 - DR-DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION
  3151.     AX = 4452h ("DR")
  3152.     CF set
  3153. Return: CF set if not DR-DOS
  3154.         AX = error code (see AH=59h)
  3155.     CF clear if DR-DOS
  3156.         DX = AX = version code
  3157.         AH = single-user/multiuser nature
  3158.         10h single-user
  3159.             AL = operating system version ID (see below)
  3160.         14h multiuser
  3161.             AL = operating system version ID (see AX=4451h)
  3162. Notes:    the DR-DOS version is stored in the environment variable VER
  3163.     use this function if looking for single-user capabilities, AX=4451h
  3164.       if looking for multiuser; this call should never return multiuser
  3165.       values
  3166. SeeAlso: AX=4412h,AX=4451h,AX=4459h
  3167.  
  3168. Values for operating system version ID:
  3169.  60h    DOS Plus
  3170.  63h    DR-DOS 3.41
  3171.  64h    DR-DOS 3.42
  3172.  65h    DR-DOS 5.00
  3173.  67h    DR-DOS 6.00
  3174.  70h    PalmDOS
  3175.  71h    DR-DOS 6.0 March 1993 "business update"
  3176.  72h    Novell DOS 7.0
  3177. --------O-214454-----------------------------
  3178. INT 21 U - DR-DOS 3.41+ - SET GLOBAL PASSWORD
  3179.     AX = 4454h
  3180.     DS:DX -> password string (blank-padded to 8 characters)
  3181. Desc:    Specify the master password for accessing files.
  3182. SeeAlso: AX=4303h,AX=4414h
  3183. --------O-214456-----------------------------
  3184. INT 21 U - DR-DOS 5.0+ - HISTORY BUFFER CONTROL
  3185.     AX = 4456h
  3186.     DL = flag
  3187.         bit 0: 1 = COMMAND.COM history buffers
  3188.            0 = set to application
  3189. Return: AL = ??? (20h if DL bit 0 set, A0h if clear (DR-DOS 6.0))
  3190. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  3191. --------O-214457-----------------------------
  3192. INT 21 U - DR-DOS 5.0+ - SHARE/HILOAD CONTROL
  3193.     AX = 4457h
  3194.     DH = subfunction
  3195.         00h enable/disable SHARE
  3196.         DL = 00h disable
  3197.            = 01h enable
  3198.            else Return: AX = ???
  3199.         01h get HILOAD status
  3200.         Return: AX = status
  3201.                 0000h off
  3202.                 0001h on
  3203.         02h set HILOAD status
  3204.         DL = new state (00h off, 01h on)
  3205.         Return: AX = ???
  3206.         other
  3207.         Return: AX = ???
  3208. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0
  3209. SeeAlso: AX=4457h/DX=FFFFh
  3210. --------O-214457DXFFFF-----------------------
  3211. INT 21 U - DR-DOS 6.0 - GET SHARE STATUS
  3212.     AX = 4457h
  3213.     DX = FFFFh
  3214. Return: AX = SHARE status
  3215. SeeAlso: INT 2F/AX=1000h
  3216. --------O-214458-----------------------------
  3217. INT 21 U - DR-DOS 5.0+ internal - GET POINTER TO INTERNAL VARIABLE TABLE
  3218.     AX = 4458h
  3219. Return: ES:BX -> internal variable table (see below)
  3220.     AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0)
  3221. SeeAlso: AX=4452h
  3222.  
  3223. Format of internal variable table:
  3224. Offset    Size    Description
  3225.  00h    WORD    ???
  3226.  02h    WORD    segment of ???
  3227.  04h  7 BYTEs    ???
  3228.  0Bh    WORD    KB of extended memory at startup
  3229.  0Dh    BYTE    number of far jump entry points
  3230.  0Eh    WORD    segment containing far jumps to DR-DOS entry points (see below)
  3231.  10h    WORD    (only if kernel loaded in HMA) offset in HMA of first free HMA
  3232.         memory block (see below) or 0000h if none; segment is FFFFh
  3233.  12h    WORD    pointer to segment of environment variables set in CONFIG,
  3234.         or 0000h if already used
  3235. ---DR-DOS 6.0---
  3236.  14h    WORD    (only if kernel loaded in HMA) offset in HMA of first used HMA
  3237.         memory block (see below) or 0000h if none; segment is FFFFh
  3238. Note:    the segment used for the DR-DOS 6.0 CONFIG environment variables
  3239.       (excluding COMSPEC, VER and OS) is only useful for programs/drivers
  3240.       called from CONFIG.SYS. The word is set to zero later when the area
  3241.       is copied to the COMMAND.COM environment space.  This allows
  3242.       CONFIG.SYS to pass information to AUTOEXEC.BAT.
  3243.  
  3244. Format of kernel entry jump table for DR-DOS 5.0-6.0:
  3245. Offset    Size    Description
  3246.  00h  5 BYTEs    far jump to kernel entry point for CP/M CALL 5
  3247.  05h  5 BYTEs    far jump to kernel entry point for INT 20
  3248.  0Ah  5 BYTEs    far jump to kernel entry point for INT 21
  3249.  0Fh  5 BYTEs    far jump to kernel entry point for INT 22 (RETF)
  3250.  14h  5 BYTEs    far jump to kernel entry point for INT 23 (RETF)
  3251.  19h  5 BYTEs    far jump to kernel entry point for INT 24
  3252.  1Eh  5 BYTEs    far jump to kernel entry point for INT 25
  3253.  23h  5 BYTEs    far jump to kernel entry point for INT 26
  3254.  28h  5 BYTEs    far jump to kernel entry point for INT 27
  3255.  2Dh  5 BYTEs    far jump to kernel entry point for INT 28
  3256.  32h  5 BYTEs    far jump to kernel entry point for INT 2A (IRET)
  3257.  37h  5 BYTEs    far jump to kernel entry point for INT 2B (IRET)
  3258.  3Ch  5 BYTEs    far jump to kernel entry point for INT 2C (IRET)
  3259.  41h  5 BYTEs    far jump to kernel entry point for INT 2D (IRET)
  3260.  46h  5 BYTEs    far jump to kernel entry point for INT 2E (IRET)
  3261.  4Bh  5 BYTEs    far jump to kernel entry point for INT 2F
  3262. Notes:    all of these entry points are indirected through this jump table
  3263.       to allow the kernel to be relocated into high memory while leaving
  3264.       the actual entry addresses in low memory for maximum compatibility
  3265.     some of these entry points (22h,23h,24h,2Eh,2Fh) are replaced as soon
  3266.       as COMMAND.COM is loaded, and return immediately to the caller, some
  3267.       returning an error code (the original handler for INT 2F returns
  3268.       AL=03h [fail]).
  3269.  
  3270. Format of HMA Memory Block (DR-DOS 6.0 kernel loaded in HMA):
  3271. Offset    Size    Description
  3272.  00h    WORD    offset of next HMA Memory Block (0000h if last block)
  3273.  02h    WORD    size of this block in bytes (at least 10h)
  3274.  04h    BYTE    type of HMA Memory Block (interpreted by MEM)
  3275.         00h system
  3276.         01h KEYB
  3277.         02h NLSFUNC
  3278.         03h SHARE
  3279.         04h TaskMAX
  3280.         05h COMMAND
  3281.  05h    var    TSR (or system) code and data. DR-DOS TSR's, such as KEYB,
  3282.         hooks interrupts using segment FFFEh instead FFFFh.
  3283. --------O-214459-----------------------------
  3284. INT 21 - DR MultiUser DOS 5.0 - API
  3285.     AX = 4459h
  3286.     CL = function (see INT E0"CP/M")
  3287.     DS,DX = parameters
  3288. Notes:    DR-DOS 5.0 returns CF set and AX=0001h
  3289.     this API is also available on INT E0
  3290. SeeAlso: AX=4452h,INT E0"CP/M"
  3291. --------N-2144E0-----------------------------
  3292. INT 21 U - Sun PC-NFS - API???
  3293.     AX = 44E0h
  3294.     DS:DX -> ???
  3295.     SS:BP -> stack frame (see below)
  3296. Return: ???
  3297. Note:    this function is also supported by Beame&Whiteside's BWPCNFS shim; the
  3298.       description presented here was derived from that shim
  3299.  
  3300. Format of stack frame:
  3301. Offset    Size    Description
  3302.  00h    WORD    -> previous stack frame
  3303.  02h    DWORD    return address
  3304. --------d-2144FFBXFFFF-----------------------
  3305. INT 21 U - NewSpace - ???
  3306.     AX = 44FFh
  3307.     BX = FFFFh
  3308.     DX = ???
  3309. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  3310.       all files as they are written and decompresses them as they are read
  3311. SeeAlso: AX=4414h/BX=FFFFh
  3312. --------D-2145-------------------------------
  3313. INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
  3314.     AH = 45h
  3315.     BX = file handle
  3316. Return: CF clear if successful
  3317.         AX = new handle
  3318.     CF set on error
  3319.         AX = error code (04h,06h) (see AH=59h)
  3320. Notes:    moving file pointer for either handle will also move it for the other,
  3321.       because both will refer to the same system file table
  3322.     for DOS versions prior to 3.3, file writes may be forced to disk by
  3323.       duplicating the file handle and closing the duplicate
  3324. SeeAlso: AH=3Dh,AH=46h
  3325. --------D-2146-------------------------------
  3326. INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
  3327.     AH = 46h
  3328.     BX = file handle
  3329.     CX = file handle to become duplicate of first handle
  3330. Return: CF clear if successful
  3331.     CF set on error
  3332.         AX = error code (04h,06h) (see AH=59h)
  3333. Notes:    closes file with handle CX if it is still open
  3334.     DOS 3.30 hangs if BX=CX on entry
  3335.     moving file pointer for either handle will also move it for the other,
  3336.       because both will refer to the same system file table
  3337. SeeAlso: AH=3Dh,AH=45h
  3338. --------D-2147-------------------------------
  3339. INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
  3340.     AH = 47h
  3341.     DL = drive number (00h = default, 01h = A:, etc)
  3342.     DS:SI -> 64-byte buffer for ASCIZ pathname
  3343. Return: CF clear if successful
  3344.         AX = 0100h (undocumented)
  3345.     CF set on error
  3346.         AX = error code (0Fh) (see AH=59h)
  3347. Notes:    the returned path does not include a drive or the initial backslash
  3348.     many Microsoft products for Windows rely on AX being 0100h on success
  3349.     under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
  3350. SeeAlso: AH=19h,AH=3Bh,AH=71h,INT 15/AX=DE25h
  3351. --------D-2148-------------------------------
  3352. INT 21 - DOS 2+ - ALLOCATE MEMORY
  3353.     AH = 48h
  3354.     BX = number of paragraphs to allocate
  3355. Return: CF clear if successful
  3356.         AX = segment of allocated block
  3357.     CF set on error
  3358.         AX = error code (07h,08h) (see AH=59h)
  3359.         BX = size of largest available block
  3360. Notes:    DOS 2.1-6.0 coalesces free blocks while scanning for a block to
  3361.       allocate
  3362.     .COM programs are initially allocated the largest available memory
  3363.       block, and should free some memory with AH=49h before attempting any
  3364.       allocations
  3365.     under the FlashTek X-32 DOS extender, EBX contains a protected-mode
  3366.       near pointer to the allocated block on a successful return
  3367. SeeAlso: AH=49h,AH=4Ah,AH=58h,AH=83h
  3368. --------D-2149-------------------------------
  3369. INT 21 - DOS 2+ - FREE MEMORY
  3370.     AH = 49h
  3371.     ES = segment of block to free
  3372. Return: CF clear if successful
  3373.     CF set on error
  3374.         AX = error code (07h,09h) (see AH=59h)
  3375. Notes:    apparently never returns an error 07h, despite official docs; DOS 2.1+
  3376.       code contains only an error 09h exit
  3377.     DOS 2.1-6.0 does not coalesce adjacent free blocks when a block is
  3378.       freed, only when a block is allocated or resized
  3379.     the code for this function is identical in DOS 2.1-6.0 except for
  3380.       calls to start/end a critical section in DOS 3+
  3381. SeeAlso: AH=48h,AH=4Ah
  3382. --------D-214A-------------------------------
  3383. INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
  3384.     AH = 4Ah
  3385.     BX = new size in paragraphs
  3386.     ES = segment of block to resize
  3387. Return: CF clear if successful
  3388.     CF set on error
  3389.         AX = error code (07h,08h,09h) (see AH=59h)
  3390.         BX = maximum paragraphs available for specified memory block
  3391. Notes:    under DOS 2.1-6.0, if there is insufficient memory to expand the block
  3392.       as much as requested, the block will be made as large as possible
  3393.     DOS 2.1-6.0 coalesces any free blocks immediately following the block
  3394.       to be resized
  3395. SeeAlso: AH=48h,AH=49h,AH=83h
  3396. --------D-214B-------------------------------
  3397. INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
  3398.     AH = 4Bh
  3399.     AL = type of load
  3400.         00h load and execute
  3401.         01h load but do not execute
  3402.         03h load overlay
  3403.         04h load and execute in background (European MS-DOS 4.0 only)
  3404.         "Exec & Go" (see also AH=80h)
  3405.     DS:DX -> ASCIZ program name (must include extension)
  3406.     ES:BX -> parameter block (see below)
  3407.     CX = mode (subfunction 04h only)
  3408.         0000h child placed in zombie mode after termination
  3409.         0001h child's return code discarded on termination
  3410. Return: CF clear if successful
  3411.         BX,DX destroyed
  3412.         if subfunction 01h, process ID set to new program's PSP; get with
  3413.         INT 21/AH=62h
  3414.     CF set on error
  3415.         AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h)
  3416. Notes:    DOS 2.x destroys all registers, including SS:SP
  3417.     under ROM-based DOS, if no disk path characters (colons or slashes)
  3418.       are included in the program name, the name is searched for in the
  3419.       ROM module headers (see below) before searching on disk
  3420.     for functions 00h and 01h, the calling process must ensure that there
  3421.       is enough unallocated memory available; if necessary, by releasing
  3422.       memory with AH=49h or AH=4Ah
  3423.     for function 01h, the AX value to be passed to the child program is put
  3424.       on top of the child's stack
  3425.     for function 03h, DOS assumes that the overlay is being loaded into
  3426.       memory allocated by the caller
  3427.     function 01h was undocumented prior to the release of DOS 5.0
  3428.     some versions (such as DR-DOS 6.0) check the parameters and parameter
  3429.       block and return an error if an invalid value (such as an offset of
  3430.       FFFFh) is found
  3431.     background programs under European MS-DOS 4.0 must use the new
  3432.       executable format
  3433.     new executables begin running with the following register values
  3434.         AX = environment segment
  3435.         BX = offset of command tail in environment segment
  3436.         CX = size of automatic data segment (0000h = 64K)
  3437.         ES,BP = 0000h
  3438.         DS = automatic data segment
  3439.         SS:SP = initial stack
  3440.       the command tail corresponds to an old executable's PSP:0081h and
  3441.       following, except that the 0Dh is turned into a NUL (00h); new
  3442.       format executables have no PSP
  3443.     under the FlashTek X-32 DOS extender, only function 00h is supported
  3444.       and the pointers are passed in DS:EDX and ES:EBX
  3445.     DR-DOS 6 always loads .EXE-format programs with no fixups above the
  3446.       64K mark to avoid the EXEPACK bug
  3447.     names for the various executable type understood by various
  3448.       environments:
  3449.         MZ  old-style DOS executable
  3450.         NE  Windows or OS/2 1.x segmented ("new") executable
  3451.         LE  Windows virtual device driver (VxD) linear executable
  3452.         LX  variant of LE used in OS/2 2.x
  3453.         W3  Windows WIN386.EXE file; a collection of LE files
  3454.         PE  Win32 (Windows NT and Win32s) portable executable based on
  3455.             Unix COFF
  3456. BUGS:    DOS 2.00 assumes that DS points at the current program's PSP
  3457.     Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
  3458.       file contains additional data after the actual overlay
  3459. SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",AH=8Ah,INT 2E
  3460.  
  3461. Format of EXEC parameter block for AL=00h,01h,04h:
  3462. Offset    Size    Description
  3463.  00h    WORD    segment of environment to copy for child process (copy caller's
  3464.         environment if 0000h)
  3465.  02h    DWORD    pointer to command tail to be copied into child's PSP
  3466.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  3467.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  3468.  0Eh    DWORD    (AL=01h) will hold subprogram's initial SS:SP on return
  3469.  12h    DWORD    (AL=01h) will hold entry point (CS:IP) on return
  3470.  
  3471. Format of EXEC parameter block for AL=03h:
  3472. Offset    Size    Description
  3473.  00h    WORD    segment at which to load overlay
  3474.  02h    WORD    relocation factor to apply to overlay if in .EXE format
  3475.  
  3476. Format of EXEC parameter block for FlashTek X-32:
  3477. Offset    Size    Description
  3478.  00h    PWORD    48-bit far pointer to environment string
  3479.  06h    PWORD    48-bit far pointer to command tail string
  3480.  
  3481. Format of .EXE file header:
  3482. Offset    Size    Description
  3483.  00h  2 BYTEs    .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
  3484.  02h    WORD    number of bytes in last 512-byte page of executable
  3485.  04h    WORD    total number of 512-byte pages in executable (includes any
  3486.         partial last page)
  3487.  06h    WORD    number of relocation entries
  3488.  08h    WORD    header size in paragraphs
  3489.  0Ah    WORD    minimum paragraphs of memory to allocation in addition to
  3490.         executable's size
  3491.  0Ch    WORD    maximum paragraphs to allocate in addition to executable's size
  3492.  0Eh    WORD    initial SS relative to start of executable
  3493.  10h    WORD    initial SP
  3494.  12h    WORD    checksum (one's complement of sum of all words in executable)
  3495.  14h    DWORD    initial CS:IP relative to start of executable
  3496.  18h    WORD    offset within header of relocation table
  3497.         40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
  3498.  1Ah    WORD    overlay number (normally 0000h = main program)
  3499. ---new executable---
  3500.  1Ch  4 BYTEs    ???
  3501.  20h    WORD    behavior bits
  3502.  22h 26 BYTEs    reserved for additional behavior info
  3503.  3Ch    DWORD    offset of new executable (NE,LE,etc) header within disk file,
  3504.         or 00000000h if plain MZ executable
  3505. ---Borland TLINK---
  3506.  1Ch  2 BYTEs    ??? (apparently always 01h 00h)
  3507.  1Eh    BYTE    signature FBh
  3508.  1Fh    BYTE    TLINK version (major in high nybble, minor in low nybble)
  3509.  20h  2 BYTEs    ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
  3510. ---ARJ self-extracting archive---
  3511.  1Ch  4 BYTEs    signature "RJSX" (older versions, new signature is "aRJsfX" in
  3512.         the first 1000 bytes of the file)
  3513. ---LZEXE 0.90 compressed executable---
  3514.  1Ch  4 BYTEs    signature "LZ09"
  3515. ---LZEXE 0.91 compressed executable---
  3516.  1Ch  4 BYTEs    signature "LZ91"
  3517. ---PKLITE compressed executable---
  3518.  1Ch    BYTE    minor version number
  3519.  1Dh    BYTE    bits 0-3: major version
  3520.         bit 4: extra compression
  3521.         bit 5: huge (multi-segment) file
  3522.  1Eh  6 BYTEs    signature "PKLITE" (followed by copyright message)
  3523. ---LHarc 1.x self-extracting archive---
  3524.  1Ch  4 BYTEs    unused???
  3525.  20h  3 BYTEs    jump to start of extraction code
  3526.  23h  2 BYTEs    ???
  3527.  25h 12 BYTEs    signature "LHarc's SFX "
  3528. ---LHA 2.x self-extracting archive---
  3529.  1Ch  8 BYTEs    ???
  3530.  24h 10 BYTEs    signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
  3531. ---TopSpeed C 3.0 CRUNCH compressed file---
  3532.  1Ch    DWORD    018A0001h
  3533.  20h    WORD    1565h
  3534. ---PKARCK 3.5 self-extracting archive---
  3535.  1Ch    DWORD    00020001h
  3536.  20h    WORD    0700h
  3537. ---BSA (Soviet archiver) self-extracting archive---
  3538.  1Ch    WORD    000Fh
  3539.  1Eh    BYTE    A7h
  3540. ---LARC self-extracting archive---
  3541.  1Ch  4 BYTEs    ???
  3542.  20h 11 BYTEs    "SFX by LARC "
  3543. ---LH self-extracting archive---
  3544.  1Ch  8 BYTEs    ???
  3545.  24h  8 BYTEs    "LH's SFX "
  3546. ---other linkers---
  3547.  1Ch    var    optional information
  3548. ---
  3549.   N   N DWORDs    relocation items
  3550. Notes:    if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
  3551.       versions of the MS linker set it that way
  3552.     if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
  3553.       program is loaded as high in memory as possible
  3554.     the maximum allocation is set to FFFFh by default
  3555.  
  3556. Format of ROM Module Header:
  3557. Offset    Size    Description
  3558.  00h  2 BYTEs    ROM signature 55h, AAh
  3559.  02h    BYTE    size of ROM in 512-byte blocks
  3560.  03h  3 BYTEs    POST initialization entry point (near JMP instruction)
  3561.  06h    ROM Program Name List [array]
  3562.     Offset    Size    Description
  3563.      00h    BYTE    length of ROM program's name (00h if end of name list)
  3564.      01h  N BYTEs    program name
  3565.      N+1  3 BYTEs    program entry point (near JMP instruction)
  3566.  
  3567. Format of new executable header:
  3568. Offset    Size    Description
  3569.  00h  2 BYTEs    "NE" (4Eh 45h) signature
  3570.  02h  2 BYTEs    linker version (major, then minor)
  3571.  04h    WORD    offset from start of this header to entry table (see below)
  3572.  06h    WORD    length of entry table in bytes
  3573.  08h    DWORD    file load CRC (0 in Borland's TPW)
  3574.  0Ch    BYTE    program flags
  3575.         bits 0-1 DGROUP type
  3576.           0 = none
  3577.           1 = single shared
  3578.           2 = multiple (unshared)
  3579.           3 = (null)
  3580.         bit 2:    global initialization
  3581.         bit 3:    protected mode only
  3582.         bit 4:    8086 instructions
  3583.         bit 5:    80286 instructions
  3584.         bit 6:    80386 instructions
  3585.         bit 7:    80x87 instructions
  3586.  0Dh    BYTE    application flags
  3587.         bits 0-2: application type
  3588.             001 full screen (not aware of Windows/P.M. API)
  3589.             010 compatible with Windows/P.M. API
  3590.             011 uses Windows/P.M. API
  3591.         bit 3: is a Family Application (OS/2)
  3592.         bit 5: 0=executable, 1=errors in image
  3593.         bit 6: non-conforming program (valid stack is not maintained)
  3594.         bit 7: DLL or driver rather than application
  3595.             (SS:SP info invalid, CS:IP points at FAR init routine
  3596.              called with AX=module handle which returns AX=0000h
  3597.              on failure, AX nonzero on successful initialization)
  3598.  0Eh    WORD    auto data segment index
  3599.  10h    WORD    initial local heap size
  3600.  12h    WORD    initial stack size (added to data seg, 0000h if SS <> DS)
  3601.  14h    DWORD    program entry point (CS:IP), "CS" is index into segment table
  3602.  18h    DWORD    initial stack pointer (SS:SP), "SS" is segment index
  3603.         if SS=automatic data segment and SP=0000h, the stack pointer is
  3604.           set to the top of the automatic data segment, just below the
  3605.           local heap
  3606.  1Ch    WORD    segment count
  3607.  1Eh    WORD    module reference count
  3608.  20h    WORD    length of nonresident names table in bytes
  3609.  22h    WORD    offset from start of this header to segment table (see below)
  3610.  24h    WORD    offset from start of this header to resource table
  3611.  26h    WORD    offset from start of this header to resident names table
  3612.  28h    WORD    offset from start of this header to module reference table
  3613.  2Ah    WORD    offset from start of this header to imported names table
  3614.         (array of counted strings, terminated with a string of length
  3615.          00h)
  3616.  2Ch    DWORD    offset from start of file to nonresident names table
  3617.  30h    WORD    count of moveable entry point listed in entry table
  3618.  32h    WORD    file alignment size shift count
  3619.         0 is equivalent to 9 (default 512-byte pages)
  3620.  34h    WORD    number of resource table entries
  3621.  36h    BYTE    target operating system
  3622.         00h unknown
  3623.         01h OS/2
  3624.         02h Windows
  3625.         03h European MS-DOS 4.x
  3626.         04h Windows 386
  3627.         05h BOSS (Borland Operating System Services)
  3628.  37h    BYTE    other EXE flags
  3629.         bit 0: supports long filenames
  3630.         bit 1: 2.X protected mode
  3631.         bit 2: 2.X proportional font
  3632.         bit 3: gangload area
  3633.  38h    WORD    offset to return thunks or start of gangload area
  3634.  3Ah    WORD    offset to segment reference thunks or length of gangload area
  3635.  3Ch    WORD    minimum code swap area size
  3636.  3Eh  2 BYTEs    expected Windows version (minor version first)
  3637. Note:    this header is documented in detail in the Windows 3.1 SDK Programmer's
  3638.       Reference, Vol 4.
  3639.  
  3640. Format of Codeview trailer (at end of executable):
  3641. Offset    Size    Description
  3642.  00h    WORD    signature 4E42h ('NB')
  3643.  02h    WORD    Microsoft debug info version number
  3644.  04h    DWORD    Codeview header offset
  3645.  
  3646. Format of new executable segment table record:
  3647.  00h    WORD    offset in file (shift left by alignment shift to get byte offs)
  3648.  02h    WORD    length of image in file (0000h = 64K)
  3649.  04h    WORD    segment attributes (see below)
  3650.  06h    WORD    number of bytes to allocate for segment (0000h = 64K)
  3651. Note:    the first segment table entry is entry number 1
  3652.  
  3653. Bitfields for segment attributes:
  3654.  bit 0    data segment rather than code segment
  3655.  bit 1    unused???
  3656.  bit 2    real mode
  3657.  bit 3    iterated
  3658.  bit 4    movable
  3659.  bit 5    sharable
  3660.  bit 6    preloaded rather than demand-loaded
  3661.  bit 7    execute-only (code) or read-only (data)
  3662.  bit 8    relocations (directly following code for this segment)
  3663.  bit 9    debug info present
  3664.  bits 10,11    80286 DPL bits
  3665.  bit 12        discardable
  3666.  bits 13-15    discard priority
  3667.  
  3668. Format of new executable entry table item (list):
  3669. Offset    Size    Description
  3670.  00h    BYTE    number of entry points (00h if end of entry table list)
  3671.  01h    BYTE    segment number (00h if end of entry table list)
  3672.  02h 3N BYTEs    entry records
  3673.         Offset    Size    Description
  3674.          00h    BYTE    flags
  3675.                 bit 0: exported
  3676.                 bit 1: single data
  3677.                 bits 2-7: unused???
  3678.          01h    WORD    offset within segment
  3679.  
  3680. Format of new executable relocation data (immediately follows segment image):
  3681. Offset    Size    Description
  3682.  00h    WORD    number of relocation items
  3683.  02h 8N BYTEs    relocation items
  3684.         Offset    Size    Description
  3685.          00h    BYTE    relocation type
  3686.                 00h LOBYTE
  3687.                 02h BASE
  3688.                 03h PTR
  3689.                 05h OFFS
  3690.                 0Bh PTR48
  3691.                 0Dh OFFS32
  3692.          01h    BYTE    flags
  3693.                 bit 2: additive
  3694.          02h    WORD    offset within segment
  3695.          04h    WORD    target address segment
  3696.          06h    WORD    target address offset
  3697.  
  3698. Format of new executable resource data:
  3699. Offset    Size    Description
  3700.  00h    WORD    alignment shift count for resource data
  3701.  02h  N RECORDs resources
  3702.     Format of resource record:
  3703.     Offset    Size    Description
  3704.      00h    WORD    type ID
  3705.             0000h if end of resource records
  3706.             >= 8000h if integer type
  3707.             else offset from start of resource table to type string
  3708.      02h    WORD    number of resources of this type
  3709.      04h    DWORD    reserved for runtime use
  3710.      08h  N Resources (see below)
  3711. Note:    resource type and name strings are stored immediately following the
  3712.       resource table, and are not null-terminated
  3713.  
  3714. Format of new executable resource entry:
  3715. Offset    Size    Description
  3716.  00h    WORD    offset in alignment units from start of file to contents of
  3717.         the resource data
  3718.  02h    WORD    length of resource image in bytes
  3719.  04h    WORD    flags
  3720.         bit 4: moveable
  3721.         bit 5: shareable
  3722.         bit 6: preloaded
  3723.  06h    WORD    resource ID
  3724.         >= 8000h if integer resource
  3725.         else offset from start of resource table to resource string
  3726.  08h    DWORD    reserved for runtime use
  3727. Notes:    resource type and name strings are stored immediately following the
  3728.       resource table, and are not null-terminated
  3729.     strings are counted strings, with a string of length 0 indicating the
  3730.       end of the resource table
  3731.  
  3732. Format of new executable module reference table [one bundle of entries]:
  3733. Offset    Size    Description
  3734.  00h    BYTE    number of records in this bundle (00h if end of table)
  3735.  01h    BYTE    segment indicator
  3736.         00h unused
  3737.         FFh movable segment, segment number is in entry
  3738.         else segment number of fixed segment
  3739.  02h  N RECORDs
  3740.     Format of segment record
  3741.     Offset    Size    Description
  3742.      00h    BYTE    flags
  3743.             bit 0: entry is exported
  3744.             bit 1: entry uses global (shared) data
  3745.             bits 7-3: number of parameter words
  3746.     ---fixed segment---
  3747.      01h    WORD    offset
  3748.     ---moveable segment---
  3749.      01h  2 BYTEs    INT 3F instruction (CDh 3Fh)
  3750.      03h    BYTE    segment number
  3751.      05h    WORD    offset
  3752. Note:    table entries are numbered starting from 1
  3753.  
  3754. Format of new executable resident/nonresident name table entry:
  3755. Offset    Size    Description
  3756.  00h    BYTE    length of string (00h if end of table)
  3757.  01h  N BYTEs    ASCII text of string
  3758.  N+1    WORD    ordinal number (index into entry table)
  3759. Notes:    the first string in the resident name table is the module name; the
  3760.       first entry in the nonresident name table is the module description
  3761.     the strings are case-sensitive; if the executable was linked with
  3762.       /IGNORECASE, all strings are in uppercase
  3763.  
  3764. Format of Linear Executable (enhanced mode executable) header:
  3765. Offset    Size    Description
  3766.  00h  2 BYTEs    "LE" (4Ch 45h) signature (Windows)
  3767.         "LX" (4Ch 58h) signature (OS/2)
  3768.  02h    BYTE    byte order (00h = little-endian, nonzero = big-endian)
  3769.  03h    BYTE    word order (00h = little-endian, nonzero = big-endian)
  3770.  04h    DWORD    executable format level
  3771.  08h    WORD    CPU type (see also INT 15/AH=C9h)
  3772.         01h Intel 80286 or upwardly compatible
  3773.         02h Intel 80386 or upwardly compatible
  3774.         03h Intel 80486 or upwardly compatible
  3775.         04h Intel Pentium (80586) or upwardly compatible
  3776.         20h Intel i860 (N10) or compatible
  3777.         21h Intel "N11" or compatible
  3778.         40h MIPS Mark I (R2000, R3000) or compatible
  3779.         41h MIPS Mark II (R6000) or compatible
  3780.         42h MIPS Mark III (R4000) or compatible
  3781.  0Ah    WORD    target operating system
  3782.         01h OS/2
  3783.         02h Windows
  3784.         03h European DOS 4.0
  3785.         04h Windows 386
  3786.  0Ch    DWORD    module version
  3787.  10h    DWORD    module type
  3788.         bit 2: initialization (only for DLLs)
  3789.             0 = global
  3790.             1 = per-process
  3791.         bit 4: no internal fixups in executable image
  3792.         bit 5: no external fixups in executable image
  3793.         bits 8,9,10:
  3794.             0 = unknown
  3795.             1 = incompatible with PM windowing \
  3796.             2 = compatible with PM windowing    > (only for
  3797.             3 = uses PM windowing API       /    programs)
  3798.         bit 13: module not loadable (only for programs)
  3799.         bits 17,16,15: module type
  3800.             000 program
  3801.             001 library (DLL)
  3802.             011 protected memory library module
  3803.             100 physical device driver
  3804.             110 virtual device driver
  3805.         bit 30: per-process library termination
  3806.             (requires valid CS:EIP, can't be set for .EXE)
  3807.  14h    DWORD    number of memory pages
  3808.  18h    Initial CS:EIP
  3809.     DWORD    object number
  3810.     DWORD    offset
  3811.  20h    Initial SS:ESP
  3812.     DWORD    object number
  3813.     DWORD    offset
  3814.  28h    DWORD    memory page size
  3815.  2Ch    DWORD    (Windows LE) bytes on last page
  3816.         (OS/2 LX) page offset shift count
  3817.  30h    DWORD    fixup section size
  3818.  34h    DWORD    fixup section checksum
  3819.  38h    DWORD    loader section size
  3820.  3Ch    DWORD    loader section checksum
  3821.  40h    DWORD    offset of object table (see below)
  3822.  44h    DWORD    object table entries
  3823.  48h    DWORD    object page map table offset
  3824.  4Ch    DWORD    object iterate data map offset
  3825.  50h    DWORD    resource table offset
  3826.  54h    DWORD    resource table entries
  3827.  58h    DWORD    resident names table offset
  3828.  5Ch    DWORD    entry table offset
  3829.  60h    DWORD    module directives table offset
  3830.  64h    DWORD    Module Directives entries
  3831.  68h    DWORD    Fixup page table offset
  3832.  6Ch    DWORD    Fixup record table offset
  3833.  70h    DWORD    imported modules name table offset
  3834.  74h    DWORD    imported modules count
  3835.  78h    DWORD    imported procedures name table offset
  3836.  7Ch    DWORD    per-page checksum table offset
  3837.  80h    DWORD    data pages offset
  3838.  84h    DWORD    preload page count
  3839.  88h    DWORD    non-resident names table offset
  3840.  8Ch    DWORD    non-resident names table length
  3841.  90h    DWORD    non-resident names checksum
  3842.  94h    DWORD    automatic data object
  3843.  98h    DWORD    debug information offset
  3844.  9Ch    DWORD    debug information length
  3845.  A0h    DWORD    preload instance pages number
  3846.  A4h    DWORD    demand instance pages number
  3847.  A8h    DWORD    extra heap allocation
  3848.  ACh 20 BYTEs    reserved
  3849.  C0h    WORD    device ID (MS-Windows VxD only)
  3850.  C2h    WORD    DDK version (MS-Windows VxD only)
  3851. Note:    used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
  3852.  
  3853. Format of object table entry:
  3854. Offset    Size    Description
  3855.  00h    DWORD    virtual size in bytes
  3856.  04h    DWORD    relocation base address
  3857.  08h    DWORD    object flags (see below)
  3858.  0Ch    DWORD    page map index
  3859.  10h    DWORD    page map entries
  3860.  14h  4 BYTEs    reserved??? (apparently always zeros)
  3861.  
  3862. Bitfields for object flags:
  3863.  bit 0    readable
  3864.  bit 1    writable
  3865.  bit 2    executable
  3866.  bit 3    resource
  3867.  bit 4    discardable
  3868.  bit 5    shared
  3869.  bit 6    preloaded
  3870.  bit 7    invalid
  3871.  bit 8-9 type
  3872.     00 normal
  3873.     01 zero-filled
  3874.     10 resident
  3875.     11 resident and contiguous
  3876.  bit 10 resident and long-lockable
  3877.  bit 11 reserved
  3878.  bit 12 16:16 alias required
  3879.  bit 13 "BIG" (Huge: 32-bit)
  3880.  bit 14 conforming
  3881.  bit 15 "OBJECT_I/O_PRIVILEGE_LEVEL"
  3882.  bits 16-31 reserved
  3883.  
  3884. Format of object page map table entry:
  3885. Offset    Size    Description
  3886.  00h    BYTE    ??? (usually 00h)
  3887.  01h    WORD    (big-endian) index to fixup table
  3888.         0000h if no relocation info
  3889.  03h    BYTE    type (00h hard copy in file, 03h some relocation needed)
  3890.  
  3891. Format of resident names table entry:
  3892. Offset    Size    Description
  3893.  00h    BYTE    length of name
  3894.  01h  N BYTEs    name
  3895.  N+1  3 BYTEs    ???
  3896.  
  3897. Format of LE linear executable entry table:
  3898. Offset    Size    Description
  3899.  00h    BYTE    number of entries in table
  3900.  01h 10 BYTEs per entry
  3901.         Offset    Size    Description
  3902.          00h    BYTE    bit flags
  3903.                 bit 0: non-empty bundle
  3904.                 bit 1: 32-bit entry
  3905.          01h    WORD    object number
  3906.          03h    BYTE    entry type flags
  3907.                 bit 0: exported
  3908.                 bit 1: uses single data rather than instance
  3909.                 bit 2: reserved
  3910.                 bits 3-7: number of stack parameters
  3911.          04h    DWORD    offset of entry point
  3912.          08h  2 BYTEs    ???
  3913. Note:    empty bundles (bit flags at 00h = 00h) are used to skip unused indices,
  3914.       and do not contain the remaining nine bytes
  3915.  
  3916. Format of LX linear executable entry table [array]:
  3917. Offset    Size    Description
  3918.  00h    BYTE    number of bundles following (00h = end of entry table)
  3919.  01h    BYTE    bundle type
  3920.         00h empty
  3921.         01h 16-bit entry
  3922.         02h 286 callgate entry
  3923.         03h 32-bit entry
  3924.         04h forwarder entry
  3925.         bit 7 set if additional parameter typing information is present
  3926. ---bundle type 00h---
  3927.  no additional fields
  3928. ---bundle type 01h---
  3929.  02h    WORD    object number
  3930.  04h    BYTE    entry flags
  3931.         bit 0: exported
  3932.         bits 7-3: number of stack parameters
  3933.  05h    WORD    offset of entry point in object (shifted by page size shift)
  3934. ---bundle type 02h---
  3935.  02h    WORD    object number
  3936.  04h    BYTE    entry flags
  3937.         bit 0: exported
  3938.         bits 7-3: number of stack parameters
  3939.  05h    WORD    offset of entry point in object
  3940.  07h    WORD    reserved for callgate selector (used by loader)
  3941. ---bundle type 03h---
  3942.  02h    WORD    object number
  3943.  04h    BYTE    entry flags
  3944.         bit 0: exported
  3945.         bits 7-3: number of stack parameters
  3946.  05h    DWORD    offset of entry point in object
  3947. ---bundle type 04h---
  3948.  02h    WORD    reserved
  3949.  04h    BYTE    forwarder flags
  3950.         bit 0: import by ordinal
  3951.         bits 7-1 reserved
  3952.  05h    WORD    module ordinal
  3953.         (forwarder's index into Import Module Name table)
  3954.  07h    DWORD    procedure name offset or import ordinal number
  3955. Note:    all fields after the first two bytes are repeated N times
  3956.  
  3957. Bitfields for linear executable fixup type:
  3958.  bit 7    ordinal is BYTE rather than WORD
  3959.  bit 6    16-bit rather than 8-bit object number/module ordinal
  3960.  bit 5    addition with DWORD rather than WORD
  3961.  bit 4    relocation info has size with new two bytes at end
  3962.  bit 3    reserved (0)
  3963.  bit 2    set if add to destination, clear to replace destination
  3964.  bits 1-0    type
  3965.         00 internal fixup
  3966.         01 external fixup, imported by ordinal
  3967.         10 external fixup, imported by name
  3968.         11 internal fixup via entry table
  3969.  
  3970. Format of linear executable fixup record:
  3971. Offset    Size    Description
  3972.  00h    BYTE    type
  3973.         bits 7-4: modifier (0001 single, 0011 multiple)
  3974.         bits 3-0: type
  3975.             0000 byte offset
  3976.             0010 word segment
  3977.             0011 16-bit far pointer (DWORD)
  3978.             0101 16-bit offset
  3979.             0110 32-bit far pointer (PWORD)
  3980.             0111 32-bit offset
  3981.             1000 near call or jump, WORD/DWORD based on seg attrib
  3982.  01h    BYTE    linear executable fixup type (see above)
  3983. ---if single type---
  3984.  02h    WORD    offset within page
  3985.  04h    relocation information
  3986.     ---internal fixup---
  3987.     BYTE    object number
  3988.     ---external,ordinal---
  3989.     BYTE    one-based module number in Import Module table
  3990.     BYTE/WORD ordinal number
  3991.     WORD/DWORD value to add (only present if modifier bit 4 set)
  3992.     ---external,name---
  3993.     BYTE    one-based module number in Import Module table
  3994.     WORD    offset in Import Procedure names
  3995.     WORD/DWORD value to add (only present if modifier bit 4 set)
  3996. ---if multiple type---
  3997.  02h    BYTE    number of items
  3998.  03h    var    relocation info as for "single" type (see above)
  3999.       N WORDs    offsets of items to relocate
  4000.  
  4001. Format of old Phar Lap .EXP file header:
  4002. Offset    Size    Description
  4003.  00h  2 BYTEs    "MP" (4Dh 50h) signature
  4004.  02h    WORD    remainder of image size / page size (page size = 512h)
  4005.  04h    WORD    size of image in pages
  4006.  06h    WORD    number of relocation items
  4007.  08h    WORD    header size in paragraphs
  4008.  0Ah    WORD    minimum number of extra 4K pages to be allocated at the end
  4009.         of program, when it is loaded
  4010.  0Ch    WORD    maximum number of extra 4K pages to be allocated at the end
  4011.         of program, when it is loaded
  4012.  0Eh    DWORD    initial ESP
  4013.  12h    WORD    word checksum of file
  4014.  14h    DWORD    initial EIP
  4015.  18h    WORD    offset of first relocation item
  4016.  1Ah    WORD    overlay number
  4017.  1Ch    WORD    ??? (wants to be 1)
  4018.  
  4019. Format of new Phar Lap .EXP file header:
  4020. Offset    Size    Description
  4021.  00h  2 BYTEs    signature ("P2" for 286 .EXP executable, "P3" for 386 .EXP)
  4022.  02h    WORD    level (01h flat-model file, 02h multisegmented file)
  4023.  04h    WORD    header size
  4024.  06h    DWORD    file size in bytes
  4025.  0Ah    WORD    checksum
  4026.  0Ch    DWORD    offset of run-time parameters within file
  4027.  10h    DWORD    size of run-time parameters in bytes
  4028.  14h    DWORD    offset of relocation table within file
  4029.  18h    DWORD    size of relocation table in bytes
  4030.  1Ch    DWORD    offset of segment information table within file
  4031.  20h    DWORD    size of segment information table in bytes
  4032.  24h    WORD    size of segment information table entry in bytes
  4033.  26h    DWORD    offset of load image within file
  4034.  2Ah    DWORD    size of load image on disk
  4035.  2Eh    DWORD    offset of symbol table within file
  4036.  32h    DWORD    size of symbol table in bytes
  4037.  36h    DWORD    offset of GDT within load image
  4038.  3Ah    DWORD    size of GDT in bytes
  4039.  3Eh    DWORD    offset of LDT within load image
  4040.  42h    DWORD    size of LDT in bytes
  4041.  46h    DWORD    offset of IDT within load image
  4042.  4Ah    DWORD    size of IDT in bytes
  4043.  4Eh    DWORD    offset of TSS within load image
  4044.  52h    DWORD    size of TSS in bytes
  4045.  56h    DWORD    minimum number of extra bytes to be allocated at end of program
  4046.         (level 1 executables only)
  4047.  5Ah    DWORD    maximum number of extra bytes to be allocated at end of program
  4048.         (level 1 executables only)
  4049.  5Eh    DWORD    base load offset (level 1 executables only)
  4050.  62h    DWORD    initial ESP
  4051.  66h    WORD    initial SS
  4052.  68h    DWORD    initial EIP
  4053.  6Ch    WORD    initial CS
  4054.  6Eh    WORD    initial LDT
  4055.  70h    WORD    initial TSS
  4056.  72h    WORD    flags
  4057.         bit 0: load image is packed
  4058.         bit 1: 32-bit checksum is present
  4059.         bits 4-2: type of relocation table
  4060.  74h    DWORD    memory requirements for load image
  4061.  78h    DWORD    32-bit checksum (optional)
  4062.  7Ch    DWORD    size of stack segment in bytes
  4063.  80h 256 BYTEs    reserved (0)
  4064.  
  4065. Format of Phar Lap segment information table entry:
  4066. Offset    Size    Description
  4067.  00h    WORD    selector number
  4068.  02h    WORD    flags
  4069.  04h    DWORD    base offset of selector
  4070.  08h    DWORD    minimum number of extra bytes to be allocated to the segment
  4071.  
  4072. Format of 386|DOS-Extender run-time parameters:
  4073. Offset    Size    Description
  4074.  00h  2 BYTEs    signature "DX" (44h 58h)
  4075.  02h    WORD    minimum number of real-mode params to leave free at run time
  4076.  04h    WORD    maximum number of real-mode params to leave free at run time
  4077.  06h    WORD    minimum interrupt buffer size in KB
  4078.  08h    WORD    maximum interrupt buffer size in KB
  4079.  0Ah    WORD    number of interrupt stacks
  4080.  0Ch    WORD    size in KB of each interrupt stack
  4081.  0Eh    DWORD    offset of byte past end of real-mode code and data
  4082.  12h    WORD    size in KB of call buffers
  4083.  14h    WORD    flags
  4084.         bit 0: file is virtual memory manager
  4085.         bit 1: file is a debugger
  4086.  16h    WORD    unprivileged flag (if nonzero, executes at ring 1, 2, or 3)
  4087.  18h 104 BYTEs    reserved (0)
  4088.  
  4089. Format of Phar Lap repeat block header:
  4090. Offset    Size    Description
  4091.  00h    WORD    byte count
  4092.  02h    BYTE    repeat string length
  4093.  
  4094. Format of Borland debugging information header (following load image):
  4095. Offset    Size    Description
  4096.  00h    WORD    signature 52FBh
  4097.  02h    WORD    version ID
  4098.  04h    DWORD    size of name pool in bytes
  4099.  08h    WORD    number of names in namem pool
  4100.  0Ah    WORD    number of type entries
  4101.  0Ch    WORD    number of structure members
  4102.  0Eh    WORD    number of symbols
  4103.  10h    WORD    number of global symbols
  4104.  12h    WORD    number of modules
  4105.  14h    WORD    number of locals (optional)
  4106.  16h    WORD    number of scopes in table
  4107.  18h    WORD    number of line-number entries
  4108.  1Ah    WORD    number of include files
  4109.  1Ch    WORD    number of segment records
  4110.  1Eh    WORD    number of segment/file correlations
  4111.  20h    DWORD    size of load image after removing uninitialized data and debug
  4112.         info
  4113.  24h    DWORD    debugger hook; pointer into debugged program whose meaning
  4114.         depends on program flags
  4115.  28h    BYTE    program flags
  4116.         bit 0: case-sensitive link
  4117.         bit 1: pascal overlay program
  4118.  29h    WORD    no longer used
  4119.  2Bh    WORD    size of data pool in bytes
  4120.  2Dh    BYTE    padding
  4121.  2Eh    WORD    size of following header extension (currently 00h, 10h, or 20h)
  4122.  30h    WORD    number of classes
  4123.  32h    WORD    number of parents
  4124.  34h    WORD    number of global classes (currently unused)
  4125.  36h    WORD    number of overloads (currently unused)
  4126.  38h    WORD    number of scope classes
  4127.  3Ah    WORD    number of module classes
  4128.  3Ch    WORD    number of coverage offsets
  4129.  3Eh    DWORD    offset relative to symbol base of name pool
  4130.  42h    WORD    number of browser information records
  4131.  44h    WORD    number of optimized symbol records
  4132.  46h    WORD    debugging flags
  4133.  48h  8 BYTEs    padding
  4134. Note:    additional information on the Borland debugging info may be found in
  4135.       Borland's Open Architecture Handbook
  4136. --------U-214B-------------------------------
  4137. INT 21 - ELRES v1.0 only - INSTALLATION CHECK
  4138.     AH = 4Bh
  4139.     DS:DX = 0000h:0000h
  4140. Return: ES:BX -> ELRES history structure (see AH=2Bh/CX=454Ch)
  4141.     DX = DABEh (signature, DAve BEnnett)
  4142. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  4143.       Bennett
  4144. SeeAlso: AH=2Bh/CX=454Ch
  4145. --------v-214B04-----------------------------
  4146. INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
  4147.     AX = 4B04h
  4148. Return: CF clear if "MG" resident
  4149.     AX = 044Bh if "699"/"Thirteen Minutes" resident
  4150. SeeAlso: AX=4243h,AX=4B21h
  4151. --------D-214B05-----------------------------
  4152. INT 21 - DOS 5+ - SET EXECUTION STATE
  4153.     AX = 4B05h
  4154.     DS:DX -> execution state structure (see below)
  4155. Return: CF clear if successful
  4156.         AX = 0000h
  4157.     CF set on error
  4158.         AX = error code (see AH=59h)
  4159. Note:    used by programs which intercept AX=4B00h to prepare new programs for
  4160.       execution (including setting the DOS version number).     No DOS, BIOS
  4161.       or other software interrupt may be called after return from this call
  4162.       before commencement of the child process.  If DOS is running in the
  4163.       HMA, A20 is turned off on return from this call.
  4164. SeeAlso: AH=4Bh
  4165.  
  4166. Format of execution state structure:
  4167. Offset    Size    Description
  4168.  00h    WORD    reserved (00h)
  4169.  02h    WORD    type flags
  4170.         bit 0: program is an .EXE
  4171.         bit 1: program is an overlay
  4172.  04h    DWORD    pointer to ASCIZ name of program file
  4173.  08h    WORD    PSP segment of new program
  4174.  0Ah    DWORD    starting CS:IP of new program
  4175.  0Eh    DWORD    program size including PSP
  4176. --------v-214B20-----------------------------
  4177. INT 21 - VIRUS - "Holocaust"/"Telefonica" - ???
  4178.     AX = 4B20h
  4179. SeeAlso: AX=4B04h,AX=4B21h
  4180. --------v-214B21-----------------------------
  4181. INT 21 C - VIRUS - "Holocaust"/"Telefonica" - ???
  4182.     AX = 4B21h
  4183. Note:    called at completion of virus installation
  4184. SeeAlso: AX=4B04h,AX=4B20h,AX=4B25h
  4185. --------v-214B25-----------------------------
  4186. INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
  4187.     AX = 4B25h
  4188. Return: DI = 1234h if resident
  4189. SeeAlso: AX=4B21h,AX=4B40h
  4190. --------v-214B40-----------------------------
  4191. INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
  4192.     AX = 4B40h
  4193. Return: AX = 5678h if resident
  4194. SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
  4195. --------v-214B41-----------------------------
  4196. INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
  4197.     AX = 4B41h
  4198.     ???
  4199. Return: ???
  4200. SeeAlso: AX=4B40h
  4201. --------v-214B4A-----------------------------
  4202. INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
  4203.     AX = 4B4Ah
  4204. Return: AL = 57h if resident
  4205. SeeAlso: AX=4B40h,AX=4B4Bh
  4206. --------v-214B4B-----------------------------
  4207. INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
  4208.     AX = 4B4Bh
  4209. Return: CF clear if resident
  4210. SeeAlso: AX=4B4Ah,AX=4B4Dh
  4211. --------v-214B4D-----------------------------
  4212. INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
  4213.     AX = 4B4Dh
  4214. Return: CF clear if resident
  4215. SeeAlso: AX=4B4Ah,AX=4B50h
  4216. --------v-214B50-----------------------------
  4217. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
  4218.     AX = 4B50h
  4219. Return: AX = 1234h if resident
  4220. SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
  4221. --------v-214B53-----------------------------
  4222. INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
  4223.     AX = 4B53h
  4224. Return: CF clear if resident
  4225. SeeAlso: AX=4B50h,AX=4B55h
  4226. --------v-214B55-----------------------------
  4227. INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
  4228.     AX = 4B55h
  4229. Return: AX = 1231h if resident
  4230. SeeAlso: AX=4B53h,AX=4B59h
  4231. --------v-214B59-----------------------------
  4232. INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
  4233.     AX = 4B59h
  4234. Return: CF clear if resident
  4235. SeeAlso: AX=4B50h,AX=4B5Eh
  4236. --------v-214B5E-----------------------------
  4237. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  4238.     AX = 4B5Eh
  4239. Return: CF clear if resident
  4240. SeeAlso: AX=4B59h,AX=4B87h
  4241. --------v-214B60-----------------------------
  4242. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
  4243.     AX = 4B60h
  4244.     ???
  4245. Return: ???
  4246. SeeAlso: AX=4B50h
  4247. --------v-214B87-----------------------------
  4248. INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
  4249.     AX = 4B87h
  4250. Return: AX = 6663h if resident
  4251. SeeAlso: AX=4B5Eh,AX=4B95h
  4252. --------v-214B95-----------------------------
  4253. INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
  4254.     AX = 4B95h
  4255. Return: AX = 1973h if resident
  4256. SeeAlso: AX=4B87h,AX=4BA7h
  4257. --------v-214BA7-----------------------------
  4258. INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
  4259.     AX = 4BA7h
  4260. Return: AX = B459h if resident
  4261. SeeAlso: AX=4B95h,AX=4BAAh
  4262. --------v-214BAA-----------------------------
  4263. INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
  4264.     AX = 4BAAh
  4265. Return: CF clear if resident
  4266. SeeAlso: AX=4BA7h,AX=4BAFh
  4267. --------v-214BAF-----------------------------
  4268. INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
  4269.     AX = 4BAFh
  4270. Return: AL = AFh if "Magnitogorsk" resident
  4271.     AL = FAh if "948"/"Screenplus1" resident
  4272. SeeAlso: AX=4BAAh,AX=4BDDh
  4273. --------v-214BDD-----------------------------
  4274. INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
  4275.     AX = 4BDDh
  4276. Return: AX = 1234h
  4277. SeeAlso: AX=4BAFh,AX=4BFEh
  4278. --------v-214BEE-----------------------------
  4279. INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21
  4280.     AX = 4BEEh
  4281. Return: AX = 1234h if grab successful
  4282.        = 2345h if failed (INT 21 grabbed previously)
  4283. Notes:    F-DRIVER.SYS is part of the F-PROT virus/trojan protection package by
  4284.       Fridrik Skulason
  4285.     when called the first time, this function moves the INT 21 monitoring
  4286.       code from its original location in the INT 21 chain to be the first
  4287.       thing called by INT 21.  This is the mechanism used by F-NET.
  4288. SeeAlso: INT 2F/AX=4653h
  4289. --------k-214BF0-----------------------------
  4290. INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK
  4291.     AX = 4BF0h
  4292. Return: CF clear if installed
  4293.         AX = 899Dh
  4294. Program: DIET is an executable-compression program by Teddy Matsumoto
  4295. SeeAlso: AX=37D0h,AX=4BF1h
  4296. --------k-214BF1-----------------------------
  4297. INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
  4298.     AX = 4BF1h
  4299. Return: ???
  4300. SeeAlso: AX=37D0h,AX=4BF0h
  4301. --------v-214BFE-----------------------------
  4302. INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK
  4303.     AX = 4BFEh
  4304. Return: AX = 1234h if "Hitchcock" resident
  4305.     AX = ABCDh if "1193"/"Copyright" resident
  4306.     DI = 55BBh if "Dark Avenger-1028" resident
  4307. SeeAlso: AX=4BDDh,AX=4BFFh"Justice"
  4308. --------v-214BFF-----------------------------
  4309. INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
  4310.     AX = 4BFFh
  4311. Return: BL = FFh if "USSR-707" resident
  4312.     DI = 55AAh if "Justice" resident
  4313.     CF clear if "Europe 92" resident
  4314. SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
  4315. --------v-214BFFSI0000-----------------------
  4316. INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
  4317.     AX = 4BFFh
  4318.     SI = 0000h
  4319.     DI = 0000h
  4320. Return: DI = 55AAh if installed
  4321. SeeAlso: AX=4BFFh"Justice",AX=5252h
  4322. --------D-214C-------------------------------
  4323. INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
  4324.     AH = 4Ch
  4325.     AL = return code
  4326. Return: never returns
  4327. Notes:    unless the process is its own parent (see AH=26h, offset 16h in PSP),
  4328.       all open files are closed and all memory belonging to the process
  4329.       is freed
  4330.     all network file locks should be removed before calling this function
  4331. SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22
  4332. SeeAlso: INT 60/DI=0601h
  4333. ----------214C57-----------------------------
  4334. INT 21 - Headroom - ???
  4335.     AX = 4C57h
  4336.     DS:DX -> target address
  4337. Note:    jumps to target address instead of terminating program
  4338. SeeAlso: AX=5758h
  4339. --------D-214D-------------------------------
  4340. INT 21 - DOS 2+ - GET RETURN CODE (ERRORLEVEL)
  4341.     AH = 4Dh
  4342. Return: AH = termination type
  4343.         00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
  4344.         01h control-C abort
  4345.         02h critical error abort
  4346.         03h terminate and stay resident (INT 21/AH=31h or INT 27)
  4347.     AL = return code
  4348. Notes:    the word in which DOS stores the return code is cleared after being
  4349.       read by this function, so the return code can only be retrieved once
  4350.     COMMAND.COM stores the return code of the last external command it
  4351.       executed as ERRORLEVEL
  4352.     this call should not be used if the child was started with AX=4B04h;
  4353.       use AH=8Ah instead
  4354.     the following sequence will close a Virtual DOS Machine under OS/2 2.0:
  4355.       MOV    AH,4Dh
  4356.       INT    21h
  4357.       HLT
  4358.       DB    02h,0FDh
  4359.       This sequence is the only way to close a specific VDM which was
  4360.       booted from floppy or a disk image.
  4361. SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
  4362. --------D-214E-------------------------------
  4363. INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
  4364.     AH = 4Eh
  4365.     AL = special flag for use by APPEND (see note below)
  4366.     CX = file attribute mask (see AX=4301h) (bits 0 and 5 ignored)
  4367.         0088h (Novell DOS 7) find first deleted file
  4368.     DS:DX -> ASCIZ file specification (may include path and wildcards)
  4369. Return: CF clear if successful
  4370.         [DTA] = FindFirst data block (see below)
  4371.     CF set on error
  4372.         AX = error code (02h,03h,12h) (see AH=59h)
  4373. Notes:    for search attributes other than 08h, all files with at MOST the
  4374.       specified combination of hidden, system, and directory attributes
  4375.       will be returned.  Under DOS 2.x, searching for attribute 08h
  4376.       (volume label) will also return normal files, while under DOS 3+
  4377.       only the volume label (if any) will be returned.
  4378.     this call also returns successfully if given the name of a character
  4379.       device without wildcards.  DOS 2.x returns attribute 00h, size 0,
  4380.       and the current date and time.  DOS 3+ returns attribute 40h and the
  4381.       current date and time.
  4382.     immediately after an INT 2F/AX=B711h (APPEND return found name), the
  4383.       name at DS:DX will be overwritten; if AL=00h on entry, the actual
  4384.       found pathname will be stored, otherwise, the actual found path
  4385.       will be prepended to the original filespec without a path.
  4386.     under LANtastic, this call may be used to obtain a list of a server's
  4387.       shared resources by searching for "\\SERVER\*.*"; a list of printer
  4388.       resources may be obtained by searching for "\\SERVER\@*.*"
  4389.     under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
  4390. BUGS:    under DOS 3.x and 4.x, the second and subsequent calls to this function
  4391.       with a character device name (no wildcards) and search attributes
  4392.       which include the volume-label bit (08h) will fail unless there is
  4393.       an intervening DOS call which implicitly or explicity performs a
  4394.       directory search without the volume-label bit.  Such implicit
  4395.       searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
  4396.       (AH=41h), and RENAME (AH=56h)
  4397.     DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
  4398. SeeAlso: AH=11h,AH=4Fh,AX=4301h,AH=71h,INT 2F/AX=111Bh,INT 2F/AX=B711h
  4399.  
  4400. Format of FindFirst data block:
  4401. Offset    Size    Description
  4402. ---PC-DOS 3.10, PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
  4403.  00h    BYTE    drive letter (bits 0-6), remote if bit 7 set
  4404.  01h 11 BYTEs    search template
  4405.  0Ch    BYTE    search attributes
  4406. ---DOS 2.x (and some DOS 3.x???)---
  4407.  00h    BYTE    search attributes
  4408.  01h    BYTE    drive letter
  4409.  02h 11 BYTEs    search template
  4410. ---WILDUNIX.COM---
  4411.  00h 12 BYTEs    15-character wildcard search pattern and drive letter (packed)
  4412.  0Ch    BYTE    search attributes
  4413. ---DOS 2.x and most 3.x---
  4414.  0Dh    WORD    entry count within directory
  4415.  0Fh    DWORD    pointer to DTA???
  4416.  13h    WORD    cluster number of start of parent directory
  4417. ---PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
  4418.  0Dh    WORD    entry count within directory
  4419.  0Fh    WORD    cluster number of start of parent directory
  4420.  11h  4 BYTEs    reserved
  4421. ---all versions, documented fields---
  4422.  15h    BYTE    attribute of file found
  4423.  16h    WORD    file time
  4424.             bits 11-15: hour
  4425.             bits 5-10:    minute
  4426.             bits 0-4:    seconds/2
  4427.  18h    WORD    file date
  4428.             bits 9-15:    year-1980
  4429.             bits 5-8:    month
  4430.             bits 0-4:    day
  4431.  1Ah    DWORD    file size
  4432.  1Eh 13 BYTEs    ASCIZ filename+extension
  4433. --------f-214E-------------------------------
  4434. INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
  4435.     AH = 4Eh
  4436.     DS:DX = 0000h:0000h
  4437. Return: AH = 99h if installed
  4438. Program: WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
  4439.       Hosgood and Terry Barnaby
  4440. --------D-214F-------------------------------
  4441. INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
  4442.     AH = 4Fh
  4443.     [DTA] = data block from previous FindFirst or FindNext call
  4444. Return: CF clear if successful
  4445.     CF set on error
  4446.         AX = error code (12h) (see AH=59h)
  4447. Note:    under Novell DOS 7, if the FindFirst call (AH=4Eh) had CX=0088h, then
  4448.       the next matching deleted file will be returned
  4449. BUG:    DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
  4450. SeeAlso: AH=12h,AH=4Eh,AH=71h,AH=72h
  4451. --------D-2150-------------------------------
  4452. INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
  4453.     AH = 50h
  4454.     BX = segment of PSP for new process
  4455. Notes:    DOS uses the current PSP address to determine which processes own files
  4456.       and memory; it corresponds to process identifiers used by other OSs
  4457.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  4458.       handler without setting the Critical Error flag
  4459.     under MS-DOS 3+ and DR-DOS 3.41+, this function does not use any of
  4460.       the DOS-internal stacks and may thus be called at any time, even
  4461.       during another INT 21h call
  4462.     some Microsoft applications such as Quick C 2.51 use segments of 0000h
  4463.       and FFFFh and direct access to the SDA (see AX=5D06h) to test whether
  4464.       they are running under MS-DOS rather than a compatible OS; although
  4465.       one should only call this function with valid PSP addresses, any
  4466.       program hooking it should be prepared to handle invalid addresses
  4467.     supported by OS/2 compatibility box
  4468.     this call was undocumented prior to the release of DOS 5.0
  4469. SeeAlso: AH=26h,AH=51h,AH=62h
  4470. --------D-2151-------------------------------
  4471. INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
  4472.     AH = 51h
  4473. Return: BX = segment of PSP for current process
  4474. Notes:    DOS uses the current PSP address to determine which processes own files
  4475.       and memory; it corresponds to process identifiers used by other OSs
  4476.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  4477.       handler without setting the Critical Error flag
  4478.     under DOS 3+, this function does not use any of the DOS-internal stacks
  4479.       and may thus be called at any time, even during another INT 21h call
  4480.     supported by OS/2 compatibility box
  4481.     identical to the documented AH=62h
  4482.     this call was undocumented prior to the release of DOS 5.0
  4483. SeeAlso: AH=26h,AH=50h,AH=62h
  4484. --------D-2152-------------------------------
  4485. INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
  4486.     AH = 52h
  4487. Return: ES:BX -> DOS list of lists
  4488. Notes:    partially supported by OS/2 v1.1 compatibility box (however, most
  4489.       pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
  4490.       pointer is FFFFh:FFFFh).
  4491.     on return, ES points at the DOS data segment (see also INT 2F/AX=1203h)
  4492. SeeAlso: INT 2F/AX=1203h
  4493.  
  4494. Format of List of Lists:
  4495. Offset    Size    Description
  4496.  -24    WORD    (DOS 3.1+) contents of CX from INT 21/AX=5E01h
  4497.  -22    WORD    (DOS ???+) LRU counter for FCB caching
  4498.  -20    WORD    (DOS ???+) LRU counter for FCB opens
  4499.  -18    DWORD    (DOS ???+) address of OEM function handler (see INT 21/AH=F8h)
  4500.             FFFFh:FFFFh if not installed or not available
  4501.  -14    WORD    (DOS ???+) offset in DOS CS of code to return from INT 21 call
  4502.  -12    WORD    (DOS 3.1+) sharing retry count (see AX=440Bh)
  4503.  -10    WORD    (DOS 3.1+) sharing retry delay (see AX=440Bh)
  4504.  -8    DWORD    (DOS 3+) pointer to current disk buffer
  4505.  -4    WORD    (DOS 3+) pointer in DOS data segment of unread CON input
  4506.         when CON is read via a handle, DOS reads an entire line,
  4507.           and returns the requested portion, buffering the rest
  4508.           for the next read.  0000h indicates no unread input
  4509.  -2    WORD    segment of first memory control block
  4510.  00h    DWORD    pointer to first Drive Parameter Block (see AH=32h)
  4511.  04h    DWORD    pointer to first System File Table (see below)
  4512.  08h    DWORD    pointer to active CLOCK$ device's header (most recently loaded
  4513.         driver with CLOCK bit set)
  4514.  0Ch    DWORD    pointer to active CON device's header (most recently loaded
  4515.         driver with STDIN bit set)
  4516. ---DOS 2.x---
  4517.  10h    BYTE    number of logical drives in system
  4518.  11h    WORD    maximum bytes/block of any block device
  4519.  13h    DWORD    pointer to first disk buffer (see below)
  4520.  17h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4521.         NUL is always the first device on DOS's linked list of device
  4522.         drivers. (see below)
  4523. ---DOS 3.0---
  4524.  10h    BYTE    number of block devices
  4525.  11h    WORD    maximum bytes/block of any block device
  4526.  13h    DWORD    pointer to first disk buffer (see below)
  4527.  17h    DWORD    pointer to array of current directory structures (see below)
  4528.  1Bh    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  4529.  1Ch    DWORD    pointer to STRING= workspace area
  4530.  20h    WORD    size of STRING area (the x in STRING=x from CONFIG.SYS)
  4531.  22h    DWORD    pointer to FCB table
  4532.  26h    WORD    the y in FCBS=x,y from CONFIG.SYS
  4533.  28h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4534.         NUL is always the first device on DOS's linked list of device
  4535.         drivers. (see below)
  4536. ---DOS 3.1-3.3---
  4537.  10h    WORD    maximum bytes per sector of any block device
  4538.  12h    DWORD    pointer to first disk buffer in buffer chain (see below)
  4539.  16h    DWORD    pointer to array of current directory structures (see below)
  4540.  1Ah    DWORD    pointer to system FCB tables (see below)
  4541.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  4542.  20h    BYTE    number of block devices installed
  4543.  21h    BYTE    number of available drive letters (largest of 5, installed
  4544.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  4545.         current directory structure array.
  4546.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4547.         NUL is always the first device on DOS's linked list of device
  4548.         drivers. (see below)
  4549.  34h    BYTE    number of JOIN'ed drives
  4550. ---DOS 4.x---
  4551.  10h    WORD    maximum bytes per sector of any block device
  4552.  12h    DWORD    pointer to disk buffer info record (see below)
  4553.  16h    DWORD    pointer to array of current directory structures (see below)
  4554.  1Ah    DWORD    pointer to system FCB tables (see below)
  4555.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  4556.         (always 00h for DOS 5.0)
  4557.  20h    BYTE    number of block devices installed
  4558.  21h    BYTE    number of available drive letters (largest of 5, installed
  4559.         block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  4560.         current directory structure array.
  4561.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  4562.         NUL is always the first device on DOS's linked list of device
  4563.         drivers. (see below)
  4564.  34h    BYTE    number of JOIN'ed drives
  4565.  35h    WORD    pointer within IBMDOS code segment to list of special program
  4566.         names (see below)
  4567.         (always 0000h for DOS 5.0)
  4568.  37h    DWORD    pointer to FAR routine for resident IFS utility functions
  4569.         (see below)
  4570.         may be called by any IFS driver which does not wish to
  4571.         service functions 20h or 24h-28h itself
  4572.  3Bh    DWORD    pointer to chain of IFS (installable file system) drivers
  4573.  3Fh    WORD    the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
  4574.  41h    WORD    number of lookahead buffers (the y in BUFFERS x,y)
  4575.  43h    BYTE    boot drive (1=A:)
  4576.  44h    BYTE    flag: 01h to use DWORD moves (80386+), 00h otherwise
  4577.  45h    WORD    extended memory size in KB
  4578. ---DOS 5.0-6.0---
  4579.  10h 39 BYTEs    as for DOS 4.x (see above)
  4580.  37h    DWORD    pointer to SETVER program list or 0000h:0000h
  4581.  3Bh    WORD    (DOS=HIGH) offset in DOS CS of function to fix A20 control
  4582.         when executing special .COM format
  4583.  3Dh    WORD    PSP of most-recently EXECed program if DOS in HMA, 0000h if low
  4584.  3Fh  8 BYTEs    as for DOS 4.x (see above)
  4585.  
  4586. Format of memory control block (see also below):
  4587. Offset    Size    Description
  4588.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  4589.  01h    WORD    PSP segment of owner or
  4590.         0000h if free
  4591.         0006h if DR-DOS XMS UMB
  4592.         0007h if DR-DOS excluded upper memory ("hole")
  4593.         0008h if belongs to DOS
  4594.         FFFAh if 386MAX UMB control block (see AX=4402h"386MAX")
  4595.         FFFDh if 386MAX locked-out memory
  4596.         FFFEh if 386MAX UMB (immediately follows its control block)
  4597.         FFFFh if 386MAX 6.01 device driver
  4598.  03h    WORD    size of memory block in paragraphs
  4599.  05h  3 BYTEs    unused by MS-DOS
  4600.         (386MAX) if locked-out block, region start/prev region end
  4601. ---DOS 2.x,3.x---
  4602.  08h  8 BYTEs    unused
  4603. ---DOS 4+ ---
  4604.  08h  8 BYTEs    ASCII program name if PSP memory block or DR-DOS UMB,
  4605.           else garbage
  4606.         null-terminated if less than 8 characters
  4607. Notes:    the next MCB is at segment (current + size + 1)
  4608.     under DOS 3.1+, the first memory block is the DOS data segment,
  4609.       containing installable drivers, buffers, etc.     Under DOS 4+ it is
  4610.       divided into subsegments, each with its own memory control block
  4611.       (see below), the first of which is at offset 0000h.
  4612.     for DOS 5+, blocks owned by DOS may have either "SC" or "SD" in bytes
  4613.       08h and 09h.    "SC" is system code or locked-out inter-UMB memory,
  4614.       "SD" is system data, device drivers, etc.
  4615.     Some versions of DR-DOS use only seven characters of the program name,
  4616.       placing a NUL in the eighth byte.
  4617.  
  4618. Format of MS-DOS 5+ UMB control block:
  4619. Offset    Size    Description
  4620.  00h    BYTE    type: 5Ah if last block in chain, 4Dh otherwise
  4621.  01h    WORD    first available paragraph in UMB if control block at start
  4622.         of UMB, 000Ah if control block at end of UMB
  4623.  03h    WORD    length in paragraphs of following UMB or locked-out region
  4624.  05h  3 BYTEs    unused
  4625.  08h  8 BYTEs    block type name: "UMB" if start block, "SM" if end block in UMB
  4626.  
  4627. Format of STARLITE (General Software's Embedded DOS) memory control block:
  4628. Offset    Size    Description
  4629.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  4630.  01h    WORD    PSP segment of owner, 0000h if free, 0008h if belongs to DOS
  4631.  03h    WORD    size of memory block in paragraphs
  4632.  05h    BYTE    unused
  4633.  06h    WORD    segment address of next memory control block (0000h if last)
  4634.  08h    WORD    segment address of previous memory control block or 0000h
  4635.  0Ah  6 BYTEs    reserved
  4636.  
  4637. Format of DOS 4+ data segment subsegment control blocks:
  4638. Offset    Size    Description
  4639.  00h    BYTE    subsegment type (blocks typically appear in this order)
  4640.         "D"  device driver
  4641.         "E"  device driver appendage
  4642.         "I"  IFS (Installable File System) driver
  4643.         "F"  FILES=  control block storage area (for FILES>5)
  4644.         "X"  FCBS=   control block storage area, if present
  4645.         "C"  BUFFERS EMS workspace area (if BUFFERS /X option used)
  4646.         "B"  BUFFERS=  storage area
  4647.         "L"  LASTDRIVE=     current directory structure array storage area
  4648.         "S"  STACKS=  code and data area, if present (see below)
  4649.         "T"  INSTALL= transient code
  4650.  01h    WORD    paragraph of subsegment start (usually the next paragraph)
  4651.  03h    WORD    size of subsegment in paragraphs
  4652.  05h  3 BYTEs    unused
  4653.  08h  8 BYTEs    for types "D" and "I", base name of file from which the driver
  4654.           was loaded (unused for other types)
  4655.  
  4656. Format of data at start of STACKS code segment (if present):
  4657. Offset    Size    Description
  4658.  00h    WORD    ???
  4659.  02h    WORD    number of stacks (the x in STACKS=x,y)
  4660.  04h    WORD    size of stack control block array (should be 8*x)
  4661.  06h    WORD    size of each stack (the y in STACKS=x,y)
  4662.  08h    DWORD    pointer to STACKS data segment
  4663.  0Ch    WORD    offset in STACKS data segment of stack control block array
  4664.  0Eh    WORD    offset in STACKS data segment of last element of that array
  4665.  10h    WORD    offset in STACKS data segment of the entry in that array for
  4666.         the next stack to be allocated (initially same as value in 0Eh
  4667.         and works its way down in steps of 8 to the value in 0Ch as
  4668.         hardware interrupts pre-empt each other)
  4669. Note:    the STACKS code segment data may, if present, be located as follows:
  4670.     DOS 3.2:    The code segment data is at a paragraph boundary fairly early
  4671.         in the IBMBIO segment (seen at 0070:0190h)
  4672.     DOS 3.3:    The code segment is at a paragraph boundary in the DOS data
  4673.         segment, which may be determined by inspecting the segment
  4674.         pointers of the vectors for those of interrupts 02h, 08h-0Eh,
  4675.         70h, 72-77h which have not been redirected by device drivers or
  4676.         TSRs.
  4677.     DOS 4+    Identified by sub-segment control block type "S" within the DOS
  4678.         data segment.
  4679. SeeAlso: INT B4"STACKMAN"
  4680.  
  4681. Format of array elements in STACKS data segment:
  4682. Offset    Size    Description
  4683.  00h    BYTE    status: 00h=free, 01h=in use, 03h=corrupted by overflow of
  4684.         higher stack.
  4685.  01h    BYTE    not used
  4686.  02h    WORD    previous SP
  4687.  04h    WORD    previous SS
  4688.  06h    WORD    ptr to word at top of stack (new value for SP). The word at the
  4689.         top of the stack is preset to point back to this control block.
  4690.  
  4691. SHARE.EXE hooks (DOS 3.1-6.00):
  4692. (offsets from first system file table--pointed at by ListOfLists+04h)
  4693. Offset    Size    Description
  4694. -3Ch    DWORD    pointer to FAR routine for ???
  4695.         Note: not called by MS-DOS 3.3, set to 0000h:0000h by
  4696.             SHARE 3.3+
  4697. -38h    DWORD    pointer to FAR routine called on opening file
  4698.         on call, internal DOS location points at filename(see AX=5D06h)
  4699.         Return: CF clear if successful
  4700.             CF set on error
  4701.                 AX = DOS error code (24h) (see AH=59h)
  4702.         Note: SHARE directly accesses DOS-internal data to get name of
  4703.             file just opened
  4704. -34h    DWORD    pointer to FAR routine called on closing file
  4705.         ES:DI -> system file table
  4706.         Note: does something to every Record Lock Record for file
  4707. -30h    DWORD    pointer to FAR routine to close all files for given computer
  4708.         (called by AX=5D03h)
  4709. -2Ch    DWORD    pointer to FAR routine to close all files for given process
  4710.         (called by AX=5D04h)
  4711. -28h    DWORD    pointer to FAR routine to close file by name
  4712.         (called by AX=5D02h)
  4713.         DS:SI -> DOS parameter list (see AX=5D00h)
  4714.            DPL's DS:DX -> name of file to close
  4715.         Return: CF clear if successful
  4716.             CF set on error
  4717.                 AX = DOS error code (03h) (see AH=59h)
  4718. -24h    DWORD    pointer to FAR routine to lock region of file
  4719.         call with BX = file handle
  4720.               ---DOS 3.x---
  4721.               CX:DX = starting offset
  4722.               SI:AX = size
  4723.               ---DOS 4+---
  4724.               DS:DX -> lock range
  4725.                     DWORD start offset
  4726.                     DWORD size in bytes
  4727.         Return: CF set on error
  4728.                 AL = DOS error code (21h) (see AH=59h)
  4729.         Note: not called if file is marked as remote
  4730. -20h    DWORD    pointer to FAR routine to unlock region of file
  4731.         call with BX = file handle
  4732.               ---DOS 3.x---
  4733.               CX:DX = starting offset
  4734.               SI:AX = size
  4735.               ---DOS 4+---
  4736.               DS:DX -> lock range
  4737.                     DWORD start offset
  4738.                     DWORD size in bytes
  4739.         Return: CF set on error
  4740.                 AL = DOS error code (21h) (see AH=59h)
  4741.         Note: not called if file is marked as remote
  4742. -1Ch    DWORD    pointer to FAR routine to check if file region is locked
  4743.         call with ES:DI -> system file table entry for file
  4744.             CX = length of region from current position in file
  4745.         Return: CF set if any portion of region locked
  4746.                 AX = 0021h
  4747. -18h    DWORD    pointer to FAR routine to get open file list entry
  4748.         (called by AX=5D05h)
  4749.         call with DS:SI -> DOS parameter list (see AX=5D00h)
  4750.             DPL's BX = index of sharing record
  4751.             DPL's CX = index of SFT in SFT chain of sharing rec
  4752.         Return: CF set on error or not loaded
  4753.                 AX = DOS error code (12h) (see AH=59h)
  4754.             CF clear if successful
  4755.                 ES:DI -> filename
  4756.                 CX = number of locks owned by specified SFT
  4757.                 BX = network machine number
  4758.                 DX destroyed
  4759. -14h    DWORD    pointer to FAR routine for updating FCB from SFT???
  4760.         call with DS:SI -> unopened FCB
  4761.               ES:DI -> system file table entry
  4762.         Return: BL = C0h???
  4763.         Note: copies following fields from SFT to FCB:
  4764.            starting cluster of file      0Bh     1Ah
  4765.            sharing record offset      33h     1Ch
  4766.            file attribute          04h     1Eh
  4767. -10h    DWORD    pointer to FAR routine to get first cluster of FCB file ???
  4768.         call with ES:DI -> system file table entry
  4769.               DS:SI -> FCB
  4770.         Return: CF set if SFT closed or sharing record offsets
  4771.                 mismatched
  4772.             CF clear if successful
  4773.                 BX = starting cluster number from FCB
  4774. -0Ch    DWORD    pointer to FAR routine to close file if duplicate for process
  4775.         DS:SI -> system file table
  4776.         Return: AX = number of handle in JFT which already uses SFT
  4777.         Note: called during open/create of a file
  4778.         Note: if SFT was opened with inheritance enabled and sharing
  4779.             mode 111, does something to all other SFTs owned by
  4780.             same process which have the same file open mode and
  4781.             sharing record
  4782. -08h    DWORD    pointer to FAR routine for closing file
  4783.         Note: closes various handles referring to file most-recently
  4784.             opened
  4785. -04h    DWORD    pointer to FAR routine to update directory info in related SFT
  4786.           entries
  4787.         call with ES:DI -> system file table entry for file (see below)
  4788.               AX = subfunction (apply to each related SFT)
  4789.                 00h: update time stamp (offset 0Dh) and date
  4790.                      stamp (offset 0Fh)
  4791.                 01h: update file size (offset 11h) and starting
  4792.                      cluster (offset 0Bh).  Sets last-accessed
  4793.                      cluster fields to start of file if file
  4794.                      never accessed
  4795.                 02h: as function 01h, but last-accessed fields
  4796.                      always changed
  4797.                 03h: do both functions 00h and 02h
  4798.         Note: follows ptr at offset 2Bh in system file table entries
  4799.         Note: NOP if opened with no-inherit or via FCB
  4800. Notes:    most of the above hooks (except -04h, -14h, -18h, and -3Ch) assume
  4801.       either that SS=DOS DS or SS=DS=DOS DS and directly access
  4802.       DOS-internal data
  4803.     sharing hooks are not supported by DR-DOS 5-6; will reportedly be
  4804.       supported by Novell DOS 7
  4805.  
  4806. Format of sharing record:
  4807. Offset    Size    Description
  4808.  00h    BYTE    flag
  4809.         00h free block
  4810.         01h allocated block
  4811.         FFh end marker
  4812.  01h    WORD    size of block
  4813.  03h    BYTE    checksum of pathname (including NUL)
  4814.         if sum of ASCII values is N, checksum is (N/256 + N%256)
  4815.  04h    WORD    offset in SHARE's DS of first Record Lock Record (see below)
  4816.  06h    DWORD    pointer to start of system file table chain for file
  4817.  0Ah    WORD    unique sequence number
  4818.  0Ch    var    ASCIZ full pathname
  4819. Note:    not supported by DR-DOS SHARE 1.1 and 2.0; will reportedly be
  4820.       supported by Novell DOS 7
  4821.  
  4822. Format of Record Lock Record (SHARE.EXE):
  4823. Offset    Size    Description
  4824.  00h    WORD    offset in SHARE's DS of next lock table in list or 0000h
  4825.  02h    DWORD    offset in file of start of locked region
  4826.  06h    DWORD    offset in file of end of locked region
  4827.  0Ah    DWORD    pointer to System File Table entry for this file
  4828.  0Eh    WORD    PSP segment of lock's owner
  4829. ---DOS 5+ ---
  4830.  10h    WORD    lock type: (00h lock all, 01h lock writes only)
  4831.  
  4832. Format of DOS 2.x system file tables:
  4833. Offset    Size    Description
  4834.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  4835.  04h    WORD    number of files in this table
  4836.  06h  28h bytes per file
  4837.     Offset    Size    Description
  4838.      00h    BYTE    number of file handles referring to this file
  4839.      01h    BYTE    file open mode (see AH=3Dh)
  4840.      02h    BYTE    file attribute
  4841.      03h    BYTE    drive (0 = character device, 1 = A, 2 = B, etc)
  4842.      04h 11 BYTEs    filename in FCB format (no path,no period,blank-padded)
  4843.      0Fh    WORD    ???
  4844.      11h    WORD    ???
  4845.      13h    DWORD    file size???
  4846.      17h    WORD    file date in packed format (see AX=5700h)
  4847.      19h    WORD    file time in packed format (see AX=5700h)
  4848.      1Bh    BYTE    device attribute (see AX=4400h)
  4849.     ---character device---
  4850.      1Ch    DWORD    pointer to device driver
  4851.     ---block device---
  4852.      1Ch    WORD    starting cluster of file
  4853.      1Eh    WORD    relative cluster in file of last cluster accessed
  4854.     ------
  4855.      20h    WORD    absolute cluster number of current cluster
  4856.      22h    WORD    ???
  4857.      24h    DWORD    current file position???
  4858.  
  4859. Format of DOS 3.0 system file tables and FCB tables:
  4860. Offset    Size    Description
  4861.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  4862.  04h    WORD    number of files in this table
  4863.  06h  38h bytes per file
  4864.     Offset    Size    Description
  4865.      00h-1Eh as for DOS 3.1+ (see below)
  4866.      1Fh    WORD    byte offset of directory entry within sector
  4867.      21h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  4868.      2Ch    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  4869.      30h    WORD    (SHARE.EXE) network machine number which opened file
  4870.             (Windows Enhanced mode DOSMGR uses the virtual machine
  4871.             ID as the machine number; see INT 2F/AX=1683h)
  4872.      32h    WORD    PSP segment of file's owner (first three entries for
  4873.             AUX/CON/PRN contain segment of IO.SYS startup code)
  4874.      34h    WORD    (SHARE.EXE) offset in SHARE code seg of share record
  4875.      36h    WORD    ??? apparently always 0000h
  4876.  
  4877. Format of DOS 3.1-3.3x, DR-DOS 5.0-6.0 system file tables and FCB tables:
  4878. Offset    Size    Description
  4879.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  4880.  04h    WORD    number of files in this table
  4881.  06h  35h bytes per file
  4882.     Offset    Size    Description
  4883.      00h    WORD    number of file handles referring to this file
  4884.      02h    WORD    file open mode (see AH=3Dh)
  4885.             bit 15 set if this file opened via FCB
  4886.      04h    BYTE    file attribute (see AX=4301h)
  4887.      05h    WORD    device info word (see AX=4400h)
  4888.             bit 15 set if remote file
  4889.             bit 14 set means do not set file date/time on closing
  4890.             bit 12 set means don't inherit on EXEC
  4891.             bits 5-0 drive number for disk files
  4892.      07h    DWORD    pointer to device driver header if character device
  4893.             else pointer to DOS Drive Parameter Block (see AH=32h)
  4894.      0Bh    WORD    starting cluster of file
  4895.      0Dh    WORD    file time in packed format (see AX=5700h)
  4896.             not used for character devices in DR-DOS
  4897.      0Fh    WORD    file date in packed format (see AX=5700h)
  4898.             not used for character devices in DR-DOS
  4899.      11h    DWORD    file size
  4900.     ---system file table---
  4901.      15h    DWORD    current offset in file (may be larger than size of
  4902.             file; INT 21/AH=42h does not check new position)
  4903.     ---FCB table---
  4904.      15h    WORD    counter for last I/O to FCB
  4905.      17h    WORD    counter for last open of FCB
  4906.             (these are separate to determine the times of the
  4907.             latest I/O and open)
  4908.     ---
  4909.      19h    WORD    relative cluster within file of last cluster accessed
  4910.      1Bh    WORD    absolute cluster number of last cluster accessed
  4911.             0000h if file never read or written???
  4912.      1Dh    WORD    number of sector containing directory entry
  4913.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  4914.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  4915.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  4916.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  4917.             (Windows Enhanced mode DOSMGR uses the virtual machine
  4918.             ID as the machine number; see INT 2F/AX=1683h)
  4919.      31h    WORD    PSP segment of file's owner (see AH=26h) (first three
  4920.             entries for AUX/CON/PRN contain segment of IO.SYS
  4921.             startup code)
  4922.      33h    WORD    offset within SHARE.EXE code segment of
  4923.             sharing record (see above)  0000h = none
  4924.  
  4925. Format of DOS 4.0-6.0 system file tables and FCB tables:
  4926. Offset    Size    Description
  4927.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  4928.  04h    WORD    number of files in this table
  4929.  06h  3Bh bytes per file
  4930.     Offset    Size    Description
  4931.      00h    WORD    number of file handles referring to this file
  4932.             FFFFh if in use but not referenced
  4933.      02h    WORD    file open mode (see AH=3Dh)
  4934.             bit 15 set if this file opened via FCB
  4935.      04h    BYTE    file attribute (see AX=4301h)
  4936.      05h    WORD    device info word (see also AX=4400h)
  4937.             bit 15 set if remote file
  4938.             bit 14 set means do not set file date/time on closing
  4939.             bit 13 set if named pipe
  4940.             bit 12 set if no inherit
  4941.             bit 11 set if network spooler
  4942.             bit 7  set if device, clear if file (only if local)
  4943.             bits 6-0 as for AX=4400h
  4944.      07h    DWORD    pointer to device driver header if character device
  4945.             else pointer to DOS Drive Parameter Block (see AH=32h)
  4946.             or REDIR data
  4947.      0Bh    WORD    starting cluster of file (local files only)
  4948.      0Dh    WORD    file time in packed format (see AX=5700h)
  4949.      0Fh    WORD    file date in packed format (see AX=5700h)
  4950.      11h    DWORD    file size
  4951.      15h    DWORD    current offset in file (SFT)
  4952.             LRU counters (FCB table, two WORDs)
  4953.     ---local file---
  4954.      19h    WORD    relative cluster within file of last cluster accessed
  4955.      1Bh    DWORD    number of sector containing directory entry
  4956.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  4957.     ---network redirector---
  4958.      19h    DWORD    pointer to REDIRIFS record
  4959.      1Dh  3 BYTEs    ???
  4960.     ------
  4961.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  4962.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  4963.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  4964.             (Windows Enhanced mode DOSMGR uses the virtual machine
  4965.             ID as the machine number; see INT 2F/AX=1683h)
  4966.      31h    WORD    PSP segment of file's owner (see AH=26h) (first three
  4967.             entries for AUX/CON/PRN contain segment of IO.SYS
  4968.             startup code)
  4969.      33h    WORD    offset within SHARE.EXE code segment of
  4970.             sharing record (see above)  0000h = none
  4971.      35h    WORD    (local) absolute cluster number of last clustr accessed
  4972.             (redirector) ???
  4973.      37h    DWORD    pointer to IFS driver for file, 0000000h if native DOS
  4974. Note:    the OS/2 2.0 DOS Boot Session does not properly fill in the filename
  4975.       field due to incomplete support for SFTs; the OS/2 2.0 DOS Window
  4976.       does not appear to support SFTs at all
  4977.  
  4978. Format of current directory structure (CDS) (array, LASTDRIVE entries):
  4979. Offset    Size    Description
  4980.  00h 67 BYTEs    ASCIZ path in form X:\PATH (local) or \\MACH\PATH (network)
  4981.  43h    WORD    drive attributes (see also note below and AX=5F07h)
  4982.         bit 15: uses network redirector     \ invalid if 00, installable
  4983.         bit 14: physical drive         / file system if 11
  4984.         bit 13: JOIN'ed      \ path above is true path that would be
  4985.         bit 12: SUBST'ed  / needed if not under SUBST or JOIN
  4986.         bit  7: remote drive hidden from redirector's assign-list and
  4987.               exempt from network connection make/break commands;
  4988.               set for CD-ROM drives
  4989.  45h    DWORD    pointer to Drive Parameter Block for drive (see AH=32h)
  4990. ---local drives---
  4991.  49h    WORD    starting cluster of current directory
  4992.         0000h = root, FFFFh = never accessed
  4993.  4Bh    WORD    ??? seems to be FFFFh always
  4994.  4Dh    WORD    ??? seems to be FFFFh always
  4995. ---network drives---
  4996.  49h    DWORD    pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
  4997.         (DOS 4 only) available for use by IFS driver
  4998.  4Dh    WORD    stored user data from INT 21/AX=5F03h
  4999. ------
  5000.  4Fh    WORD    offset in current directory path of backslash corresponding to
  5001.           root directory for drive
  5002.         this value specifies how many characters to hide from the
  5003.           "CHDIR" and "GETDIR" calls; normally set to 2 to hide the
  5004.           drive letter and colon, SUBST, JOIN, and networks change it
  5005.           so that only the appropriate portion of the true path is
  5006.           visible to the user
  5007. ---DOS 4+ ---
  5008.  51h    BYTE    (DOS 4 only, remote drives) device type
  5009.         04h network drive
  5010.  52h    DWORD    pointer to IFS driver (DOS 4) or redirector block (DOS 5+) for
  5011.         this drive, 00000000h if native DOS
  5012.  56h    WORD    available for use by IFS driver
  5013. Notes:    the path for invalid drives is normally set to X:\, but may be empty
  5014.       after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions
  5015.     normally, only one of bits 13&12 may be set together with bit 14, but
  5016.       DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
  5017.       0001 SUBST, 0101 ASSIGN (see below)
  5018.  
  5019. Format of DR-DOS 5.0-6.0 current directory structure entry (array):
  5020. Offset    Size    Description
  5021.  00h 67 BYTEs    ASCIZ pathname of actual root directory for this logical drive
  5022.  43h    WORD    drive attributes
  5023.         1000h SUBSTed drive
  5024.         3000h??? JOINed drive
  5025.         4000h physical drive
  5026.         5000h ASSIGNed drive
  5027.         7000h JOINed drive
  5028.         8000h network drive
  5029.  45h    BYTE    physical drive number (0=A:) if this logical drive is valid
  5030.  46h    BYTE    ??? apparently flags for JOIN and ASSIGN
  5031.  47h    WORD    cluster number of start of parent directory (0000h = root)
  5032.  49h    WORD    entry number of current directory in parent directory
  5033.  4Bh    WORD    cluster number of start of current directory
  5034.  4Dh    WORD    used for media change detection (details not available)
  5035.  4Fh    WORD    cluster number of SUBST/JOIN "root" directory
  5036.         0000h if physical root directory
  5037.  
  5038. Format of device driver header:
  5039. Offset    Size    Description
  5040.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  5041.  04h    WORD    device attributes
  5042.         Character device:
  5043.            bit 15 set (indicates character device)
  5044.            bit 14 IOCTL supported (see AH=44h)
  5045.            bit 13 (DOS 3+) output until busy supported
  5046.            bit 12 reserved
  5047.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  5048.            bits 10-8 reserved
  5049.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  5050.                 (see AX=4410h,AX=4411h)
  5051.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  5052.                 (see AX=440Ch,AX=440Dh)
  5053.            bit 5  reserved
  5054.            bit 4  device is special (use INT 29 "fast console output")
  5055.            bit 3  device is CLOCK$ (all reads/writes use transfer
  5056.                 record described below)
  5057.            bit 2  device is NUL
  5058.            bit 1  device is standard output
  5059.            bit 0  device is standard input
  5060.         Block device:
  5061.            bit 15 clear (indicates block device)
  5062.            bit 14 IOCTL supported
  5063.            bit 13 non-IBM format
  5064.            bit 12 network device (device is remote)
  5065.            bit 11 (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  5066.            bit 10 reserved
  5067.            bit 9  direct I/O not allowed???
  5068.               (set by DOS 3.3 DRIVER.SYS for "new" drives)
  5069.            bit 8  ??? set by DOS 3.3 DRIVER.SYS for "new" drives
  5070.            bit 7  (DOS 5+) Generic IOCTL check call supported (cmd 19h)
  5071.                 (see AX=4410h,AX=4411h)
  5072.            bit 6  (DOS 3.2+) Generic IOCTL call supported (command 13h)
  5073.                 implies support for commands 17h and 18h
  5074.                 (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh)
  5075.            bits 5-2 reserved
  5076.            bit 1   driver supports 32-bit sector addressing (DOS 3.31+)
  5077.            bit 0   reserved
  5078.         Note: for European MS-DOS 4.0, bit 11 also indicates that bits
  5079.             8-6 contain a version code (000 = DOS 3.0,3.1;
  5080.             001 = DOS 3.2, 010 = European DOS 4.0)
  5081.  06h    WORD    device strategy entry point
  5082.         call with ES:BX -> request header (see INT 2F/AX=0802h)
  5083.  08h    WORD    device interrupt entry point
  5084. ---character device---
  5085.  0Ah  8 BYTEs    blank-padded character device name
  5086. ---block device---
  5087.  0Ah    BYTE    number of subunits (drives) supported by driver
  5088.  0Bh  7 BYTEs    unused
  5089. ---
  5090.  12h    WORD    (CD-ROM driver) reserved, must be 0000h
  5091.         appears to be another device chain
  5092.  14h    BYTE    (CD-ROM driver) drive letter (must initially be 00h)
  5093.  15h    BYTE    (CD-ROM driver) number of units
  5094.  16h  6 BYTEs    (CD-ROM driver) signature 'MSCDnn' where 'nn' is version
  5095.             (currently '00')
  5096.  
  5097. Format of CLOCK$ transfer record:
  5098. Offset    Size    Description
  5099.  00h    WORD    number of days since 1-Jan-1980
  5100.  02h    BYTE    minutes
  5101.  03h    BYTE    hours
  5102.  04h    BYTE    hundredths of second
  5103.  05h    BYTE    seconds
  5104.  
  5105. Format of DOS 2.x disk buffer:
  5106. Offset    Size    Description
  5107.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  5108.         least-recently used buffer is first in chain
  5109.  04h    BYTE    drive (0=A, 1=B, etc), FFh if not in use
  5110.  05h  3 BYTEs    unused??? (seems always to be 00h 00h 01h)
  5111.  08h    WORD    logical sector number
  5112.  0Ah    BYTE    number of copies to write (1 for non-FAT sectors)
  5113.  0Bh    BYTE    sector offset between copies if multiple copies to be written
  5114.  0Ch    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5115.  10h        buffered data
  5116.  
  5117. Format of DOS 3.x disk buffer:
  5118. Offset    Size    Description
  5119.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  5120.         least-recently used buffer is first in chain
  5121.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  5122.  05h    BYTE    buffer flags
  5123.         bit 7: ???
  5124.         bit 6: buffer dirty
  5125.         bit 5: buffer has been referenced
  5126.         bit 4: ???
  5127.         bit 3: sector in data area
  5128.         bit 2: sector in a directory, either root or subdirectory
  5129.         bit 1: sector in FAT
  5130.         bit 0: boot sector??? (guess)
  5131.  06h    WORD    logical sector number
  5132.  08h    BYTE    number of copies to write (1 for non-FAT sectors)
  5133.  09h    BYTE    sector offset between copies if multiple copies to be written
  5134.  0Ah    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5135.  0Eh    WORD    unused??? (almost always 0)
  5136.  10h        buffered data
  5137.  
  5138. Format of DOS 4.00 (pre UR 25066) disk buffer info:
  5139. Offset    Size    Description
  5140.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  5141.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  5142.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5143.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5144.  0Ch    BYTE    00h if buffers in EMS (/X), FFh if not
  5145.  0Dh    WORD    EMS handle for buffers, zero if not in EMS
  5146.  0Fh    WORD    EMS physical page number used for buffers (usually 255)
  5147.  11h    WORD    ??? seems always to be 0001h
  5148.  13h    WORD    segment of EMS physical page frame
  5149.  15h    WORD    ??? seems always to be zero
  5150.  17h  4 WORDs    EMS partial page mapping information???
  5151.  
  5152. Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
  5153. Offset    Size    Description
  5154.  00h    DWORD    pointer to array of disk buffer hash chain heads (see below)
  5155.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  5156.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5157.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5158.  0Ch    BYTE    01h, possibly to distinguish from pre-UR 25066 format
  5159.  0Dh    WORD    ??? EMS segment for BUFFERS (only with /XD)
  5160.  0Fh    WORD    ??? EMS physical page number of EMS seg above (only with /XD)
  5161.  11h    WORD    ??? EMS segment for ??? (only with /XD)
  5162.  13h    WORD    ??? EMS physical page number of above (only with /XD)
  5163.  15h    BYTE    ??? number of EMS page frames present (only with /XD)
  5164.  16h    WORD    segment of one-sector workspace buffer allocated in main memory
  5165.           if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
  5166.           into EMS
  5167.  18h    WORD    EMS handle for buffers, zero if not in EMS
  5168.  1Ah    WORD    EMS physical page number used for buffers (usually 255)
  5169.  1Ch    WORD    ??? appears always to be 0001h
  5170.  1Eh    WORD    segment of EMS physical page frame
  5171.  20h    WORD    ??? appears always to be zero
  5172.  22h    BYTE    00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
  5173.  
  5174. Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
  5175. Offset    Size    Description
  5176.  00h    WORD    EMS logical page number in which chain is resident, -1 if not
  5177.         in EMS
  5178.  02h    DWORD    pointer to least recently used buffer header.  All buffers on
  5179.         this chain are in the same segment.
  5180.  06h    BYTE    number of dirty buffers on this chain
  5181.  07h    BYTE    reserved (00h)
  5182. Notes:    buffered disk sectors are assigned to chain N where N is the sector's
  5183.       address modulo NDBCH,     0 <= N <= NDBCH-1
  5184.     each chain resides completely within one EMS page
  5185.     this structure is in main memory even if buffers are in EMS
  5186.  
  5187. Format of DOS 4.0-6.0 disk buffer:
  5188. Offset    Size    Description
  5189.  00h    WORD    forward ptr, offset only, to next least recently used buffer
  5190.  02h    WORD    backward ptr, offset only
  5191.  04h    BYTE    drive (0=A,1=B, etc) if bit 7 clear
  5192.         SFT index if bit 7 set
  5193.         FFh if not in use
  5194.  05h    BYTE    buffer flags
  5195.         bit 7: remote buffer
  5196.         bit 6: buffer dirty
  5197.         bit 5: buffer has been referenced (reserved in DOS 5+)
  5198.         bit 4: search data buffer (only valid if remote buffer)
  5199.         bit 3: sector in data area
  5200.         bit 2: sector in a directory, either root or subdirectory
  5201.         bit 1: sector in FAT
  5202.         bit 0: reserved
  5203.  06h    DWORD    logical sector number (local buffers only)
  5204.  0Ah    BYTE    number of copies to write
  5205.         for FAT sectors, same as number of FATs
  5206.         for data and directory sectors, usually 1
  5207.  0Bh    WORD    offset in sectors between copies to write for FAT sectors
  5208.  0Dh    DWORD    pointer to DOS Drive Parameter Block (see AH=32h)
  5209.  11h    WORD    size of data in buffer if remote buffer (see flags above)
  5210.  13h    BYTE    reserved (padding)
  5211.  14h        buffered data
  5212. Note:    for DOS 4.x, all buffered sectors which have the same hash value
  5213.       (computed as the sum of high and low words of the logical sector
  5214.       number divided by the number of disk buffer chains) are on the same
  5215.       doubly-linked circular chain; for DOS 5+, only a single circular
  5216.       chain exists.
  5217.     the links consist of offset addresses only, the segment being the same
  5218.       for all buffers in the chain.
  5219.  
  5220. Format of DOS 5.0-6.0 disk buffer info:
  5221. Offset    Size    Description
  5222.  00h    DWORD    pointer to least-recently-used buffer header (may be in HMA)
  5223.         (see above)
  5224.  04h    WORD    number of dirty disk buffers
  5225.  06h    DWORD    pointer to lookahead buffer, zero if not present
  5226.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  5227.  0Ch    BYTE    buffer location
  5228.         00h base memory, no workspace buffer
  5229.         01h HMA, workspace buffer in base memory
  5230.  0Dh    DWORD    pointer to one-segment workspace buffer in base memory
  5231.  11h  3 BYTEs    unused
  5232.  14h    WORD    ???
  5233.  16h    BYTE    flag: INT 24 fail while making an I/O status call
  5234.  17h    BYTE    temp storage for user memory allocation strategy during EXEC
  5235.  18h    BYTE    counter: number of INT 21 calls for which A20 is off
  5236.  19h    BYTE    bit flags
  5237.         bit 0: ???
  5238.         bit 1: SWITCHES=/W specified in CONFIG.SYS (don't load
  5239.             WINA20.SYS when MS Windows 3.0 starts)
  5240.         bit 2: in EXEC state (INT 21/AX=4B05h)
  5241.  1Ah    WORD    offset of unpack code start (used only during INT 21/AX=4B05h)
  5242.  1Ch    BYTE    bit 0 set iff UMB MCB chain linked to normal MCB chain
  5243.  1Dh    WORD    minimum paragraphs of memory required by program being EXECed
  5244.  1Fh    WORD    segment of first MCB in upper memory blocks or FFFFh if DOS
  5245.         memory chain in base 640K only (first UMB MCB usually at 9FFFh,
  5246.         locking out video memory with a DOS-owned memory block)
  5247.  21h    WORD    paragraph from which to start scanning during memory allocation
  5248.  
  5249. Format of IFS driver list:
  5250. Offset    Size    Description
  5251.  00h    DWORD    pointer to next driver header
  5252.  04h  8 BYTEs    IFS driver name (blank padded), as used by FILESYS command
  5253.  0Ch  4 BYTEs    ???
  5254.  10h    DWORD    pointer to IFS utility function entry point (see below)
  5255.         call with ES:BX -> IFS request (see below)
  5256.  14h    WORD    offset in header's segment of driver entry point
  5257.     ???
  5258.  
  5259. Call IFS utility function entry point with:
  5260.     AH = 20h miscellaneous functions
  5261.         AL = 00h get date
  5262.         Return: CX = year
  5263.             DH = month
  5264.             DL = day
  5265.         AL = 01h get process ID and computer ID
  5266.         Return: BX = current PSP segment
  5267.             DX = active network machine number
  5268.         AL = 05h get file system info
  5269.         ES:DI -> 16-byte info buffer
  5270.         Return: buffer filled
  5271.             Offset    Size    Description
  5272.              00h  2 BYTEs    unused
  5273.              02h    WORD    number of SFTs (actually counts only
  5274.                     the first two file table arrays)
  5275.              04h    WORD    number of FCB table entries
  5276.              06h    WORD    number of proctected FCBs
  5277.              08h  6 BYTEs    unused
  5278.              0Eh    WORD    largest sector size supported
  5279.         AL = 06h get machine name
  5280.         ES:DI -> 18-byte buffer for name
  5281.         Return: buffer filled with name starting at offset 02h
  5282.         AL = 08h get sharing retry count
  5283.         Return: BX = sharing retry count
  5284.         AL = other
  5285.         Return: CF set
  5286.     AH = 21h get redirection state
  5287.         BH = type (03h disk, 04h printer)
  5288.         Return: BH = state (00h off, 01h on)
  5289.     AH = 22h ??? some sort of time calculation
  5290.         AL = 00h ???
  5291.             nonzero ???
  5292.     AH = 23h ??? some sort of time calculation
  5293.     AH = 24h compare filenames
  5294.         DS:SI -> first ASCIZ filename
  5295.         ES:DI -> second ASCIZ filename
  5296.         Return: ZF set if files are same ignoring case and / vs \
  5297.     AH = 25h normalize filename
  5298.         DS:SI -> ASCIZ filename
  5299.         ES:DI -> buffer for result
  5300.         Return: filename uppercased, forward slashes changed to backslashes
  5301.     AH = 26h get DOS stack
  5302.         Return: DS:SI -> top of stack
  5303.             CX = size of stack in bytes
  5304.     AH = 27h increment InDOS flag
  5305.     AH = 28h decrement InDOS flag
  5306. Note:    IFS drivers which do not wish to implement functions 20h or 24h-28h may
  5307.       pass them on to the default handler pointed at by [LoL+37h]
  5308.  
  5309. Format of IFS request block:
  5310. Offset    Size    Description
  5311.  00h    WORD    total size in bytes of request
  5312.  02h    BYTE    class of request
  5313.         02h ???
  5314.         03h redirection
  5315.         04h ???
  5316.         05h file access
  5317.         06h convert error code to string
  5318.         07h ???
  5319.  03h    WORD    returned DOS error code
  5320.  05h    BYTE    IFS driver exit status
  5321.         00h success
  5322.         01h ???
  5323.         02h ???
  5324.         03h ???
  5325.         04h ???
  5326.         FFh internal failure
  5327.  06h 16 BYTEs    ???
  5328. ---request class 02h---
  5329.  16h    BYTE    function code
  5330.         04h ???
  5331.  17h    BYTE    unused???
  5332.  18h    DWORD    pointer to ???
  5333.  1Ch    DWORD    pointer to ???
  5334.  20h  2 BYTEs    ???
  5335. ---request class 03h---
  5336.  16h    BYTE    function code
  5337.  17h    BYTE    ???
  5338.  18h    DWORD    pointer to ???
  5339.  1Ch    DWORD    pointer to ???
  5340.  22h    WORD    returned ???
  5341.  24h    WORD    returned ???
  5342.  26h    WORD    returned ???
  5343.  28h    BYTE    returned ???
  5344.  29h    BYTE    unused???
  5345. ---request class 04h---
  5346.  16h    DWORD    pointer to ???
  5347.  1Ah    DWORD    pointer to ???
  5348. ---request class 05h---
  5349.  16h    BYTE    function code
  5350.         01h flush disk buffers
  5351.         02h get disk space
  5352.         03h MKDIR
  5353.         04h RMDIR
  5354.         05h CHDIR
  5355.         06h delete file
  5356.         07h rename file
  5357.         08h search directory
  5358.         09h file open/create
  5359.         0Ah LSEEK
  5360.         0Bh read from file
  5361.         0Ch write to file
  5362.         0Dh lock region of file
  5363.         0Eh commit/close file
  5364.         0Fh get/set file attributes
  5365.         10h printer control
  5366.         11h ???
  5367.         12h process termination
  5368.         13h ???
  5369.     ---class 05h function 01h---
  5370.      17h  7 BYTEs    ???
  5371.      1Eh    DWORD    pointer to ???
  5372.      22h  4 BYTEs    ???
  5373.      26h    BYTE    ???
  5374.      27h    BYTE    ???
  5375.     ---class 05h function 02h---
  5376.      17h  7 BYTEs    ???
  5377.      1Eh    DWORD    pointer to ???
  5378.      22h  4 BYTEs    ???
  5379.      26h    WORD    returned total clusters
  5380.      28h    WORD    returned sectors per cluster
  5381.      2Ah    WORD    returned bytes per sector
  5382.      2Ch    WORD    returned available clusters
  5383.      2Eh    BYTE    returned ???
  5384.      2Fh    BYTE    ???
  5385.     ---class 05h functions 03h,04h,05h---
  5386.      17h  7 BYTEs    ???
  5387.      1Eh    DWORD    pointer to ???
  5388.      22h  4 BYTEs    ???
  5389.      26h    DWORD    pointer to directory name
  5390.     ---class 05h function 06h---
  5391.      17h  7 BYTEs    ???
  5392.      1Eh    DWORD    pointer to ???
  5393.      22h  4 BYTEs    ???
  5394.      26h    WORD    attribute mask
  5395.      28h    DWORD    pointer to filename
  5396.     ---class 05h function 07h---
  5397.      17h  7 BYTEs    ???
  5398.      1Eh    DWORD    pointer to ???
  5399.      22h  4 BYTEs    ???
  5400.      26h    WORD    attribute mask
  5401.      28h    DWORD    pointer to source filespec
  5402.      2Ch    DWORD    pointer to destination filespec
  5403.     ---class 05h function 08h---
  5404.      17h  7 BYTEs    ???
  5405.      1Eh    DWORD    pointer to ???
  5406.      22h  4 BYTEs    ???
  5407.      26h    BYTE    00h FINDFIRST
  5408.             01h FINDNEXT
  5409.      28h    DWORD    pointer to FindFirst search data + 01h if FINDNEXT
  5410.      2Ch    WORD    search attribute if FINDFIRST
  5411.      2Eh    DWORD    pointer to filespec if FINDFIRST
  5412.     ---class 05h function 09h---
  5413.      17h  7 BYTEs    ???
  5414.      1Eh    DWORD    pointer to ???
  5415.      22h    DWORD    pointer to IFS open file structure (see below)
  5416.      26h    WORD    ???  \ together, specify open vs. create, whether or
  5417.      28h    WORD    ???  / not to truncate
  5418.      2Ah  4 BYTEs    ???
  5419.      2Eh    DWORD    pointer to filename
  5420.      32h  4 BYTEs    ???
  5421.      36h    WORD    file attributes on call
  5422.             returned ???
  5423.      38h    WORD    returned ???
  5424.     ---class 05h function 0Ah---
  5425.      17h  7 BYTEs    ???
  5426.      1Eh    DWORD    pointer to ???
  5427.      22h    DWORD    pointer to IFS open file structure (see below)
  5428.      26h    BYTE    seek type (02h = from end)
  5429.      28h    DWORD    offset on call
  5430.             returned new absolute position
  5431.     ---class 05h functions 0Bh,0Ch---
  5432.      17h  7 BYTEs    ???
  5433.      1Eh    DWORD    pointer to ???
  5434.      22h    DWORD    pointer to IFS open file structure (see below)
  5435.      28h    WORD    number of bytes to transfer
  5436.             returned bytes actually transferred
  5437.      2Ah    DWORD    transfer address
  5438.     ---class 05h function 0Dh---
  5439.      17h  7 BYTEs    ???
  5440.      1Eh    DWORD    pointer to ???
  5441.      22h    DWORD    pointer to IFS open file structure (see below)
  5442.      26h    BYTE    file handle???
  5443.      27h    BYTE    unused???
  5444.      28h    WORD    ???
  5445.      2Ah    WORD    ???
  5446.      2Ch    WORD    ???
  5447.      2Eh    WORD    ???
  5448.     ---class 05h function 0Eh---
  5449.      17h  7 BYTEs    ???
  5450.      1Eh    DWORD    pointer to ???
  5451.      22h    DWORD    pointer to IFS open file structure (see below)
  5452.      26h    BYTE    00h commit file
  5453.             01h close file
  5454.      27h    BYTE    unused???
  5455.     ---class 05h function 0Fh---
  5456.      17h  7 BYTEs    ???
  5457.      1Eh    DWORD    pointer to ???
  5458.      22h  4 BYTEs    ???
  5459.      26h    BYTE    02h GET attributes
  5460.             03h PUT attributes
  5461.      27h    BYTE    unused???
  5462.      28h 12 BYTEs    ???
  5463.      34h    WORD    search attributes???
  5464.      36h    DWORD    pointer to filename
  5465.      3Ah    WORD    (GET) returned ???
  5466.      3Ch    WORD    (GET) returned ???
  5467.      3Eh    WORD    (GET) returned ???
  5468.      40h    WORD    (GET) returned ???
  5469.      42h    WORD    (PUT) new attributes
  5470.             (GET) returned attributes
  5471.     ---class 05h function 10h---
  5472.      17h  7 BYTEs    ???
  5473.      1Eh    DWORD    pointer to ???
  5474.      22h    DWORD    pointer to IFS open file structure (see below)
  5475.      26h    WORD    ???
  5476.      28h    DWORD    pointer to ???
  5477.      2Ch    WORD    ???
  5478.      2Eh    BYTE    ???
  5479.      2Fh    BYTE    subfunction
  5480.             01h get printer setup
  5481.             03h ???
  5482.             04h ???
  5483.             05h ???
  5484.             06h ???
  5485.             07h ???
  5486.             21h set printer setup
  5487.     ---class 05h function 11h---
  5488.      17h  7 BYTEs    ???
  5489.      1Eh    DWORD    pointer to ???
  5490.      22h    DWORD    pointer to IFS open file structure (see below)
  5491.      26h    BYTE    subfunction
  5492.      27h    BYTE    unused???
  5493.      28h    WORD    ???
  5494.      2Ah    WORD    ???
  5495.      2Ch    WORD    ???
  5496.      2Eh    BYTE    ???
  5497.      2Fh    BYTE    ???
  5498.     ---class 05h function 12h---
  5499.      17h 15 BYTEs    unused???
  5500.      26h    WORD    PSP segment
  5501.      28h    BYTE    type of process termination
  5502.      29h    BYTE    unused???
  5503.     ---class 05h function 13h---
  5504.      17h 15 BYTEs    unused???
  5505.      26h    WORD    PSP segment
  5506. ---request class 06h---
  5507.  16h    DWORD    returned pointer to string corresponding to error code at 03h
  5508.  1Ah    BYTE    returned ???
  5509.  1Bh    BYTE    unused
  5510. ---request class 07h---
  5511.  16h    DWORD    pointer to IFS open file structure (see below)
  5512.  1Ah    BYTE    ???
  5513.  1Bh    BYTE    unused???
  5514.  
  5515. Format of IFS open file structure:
  5516. Offset    Size    Description
  5517.  00h    WORD    ???
  5518.  02h    WORD    device info word
  5519.  04h    WORD    file open mode
  5520.  06h    WORD    ???
  5521.  08h    WORD    file attributes
  5522.  0Ah    WORD    owner's network machine number
  5523.  0Ch    WORD    owner's PSP segment
  5524.  0Eh    DWORD    file size
  5525.  12h    DWORD    current offset in file
  5526.  16h    WORD    file time
  5527.  18h    WORD    file date
  5528.  1Ah 11 BYTEs    filename in FCB format
  5529.  25h    WORD    ???
  5530.  27h    WORD    hash value of SFT address
  5531.         (low word of linear address + segment&F000h)
  5532.  29h  3 WORDs    network info from SFT
  5533.  2Fh    WORD    ???
  5534.  
  5535. Format of one item in DOS 4+ list of special program names:
  5536. Offset    Size    Description
  5537.  00h    BYTE    length of name (00h = end of list)
  5538.  01h  N BYTEs    name in format name.ext
  5539.  N    2 BYTEs    DOS version to return for program (major,minor)
  5540.         (see AH=30h,INT 2F/AX=122Fh)
  5541. ---DOS 4 only---
  5542.  N+2    BYTE    number of times to return fake version number (FFh = always)
  5543. Note:    if the name of the executable for the program making the DOS "get
  5544.       version" call matches one of the names in this list, DOS returns the
  5545.       specified version rather than the true version number
  5546. --------v-215252-----------------------------
  5547. INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
  5548.     AX = 5252h
  5549. Return: BX = FFEEh if resident
  5550. SeeAlso: AX=4BFFh"Cascade",AX=58CCh
  5551. --------D-2153-------------------------------
  5552. INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
  5553.     AH = 53h
  5554.     DS:SI -> BIOS Parameter Block (see below)
  5555.     ES:BP -> buffer for Drive Parameter Block (see AH=32h for format)
  5556. Return: ES:BP buffer filled
  5557. Note:    for DOS 3+, the cluster at which to start searching is set to 0000h
  5558.       and the number of free clusters is set to FFFFh (unknown)
  5559.  
  5560. Format of BIOS Parameter Block:
  5561. Offset    Size    Description
  5562.  00h    WORD    number of bytes per sector
  5563.  02h    BYTE    number of sectors per cluster
  5564.  03h    WORD    number of reserved sectors at start of disk
  5565.  05h    BYTE    number of FATs
  5566.  06h    WORD    number of entries in root directory
  5567.  08h    WORD    total number of sectors
  5568.         for DOS 4+, set to zero if partition >32M, then set DWORD at
  5569.           15h to actual number of sectors
  5570.  0Ah    BYTE    media ID byte
  5571.  0Bh    WORD    number of sectors per FAT
  5572. ---DOS 3+---
  5573.  0Dh    WORD    number of sectors per track
  5574.  0Fh    WORD    number of heads
  5575.  11h    DWORD    number of hidden sectors
  5576.  15h 11 BYTEs    reserved
  5577. ---DOS 4+ ---
  5578.  15h    DWORD    total number of sectors if word at 08h contains zero
  5579.  19h  6 BYTEs    ???
  5580.  1Fh    WORD    number of cylinders
  5581.  21h    BYTE    device type
  5582.  22h    WORD    device attributes (removable or not, etc)
  5583. ---DR-DOS 5+ ---
  5584.  15h    DWORD    total number of sectors if word at 08h contains zero
  5585.  19h  6 BYTEs    reserved
  5586. ---European MS-DOS 4.00---
  5587.  15h    DWORD    total number of sectors if word at 08h contains zero
  5588.         (however, this DOS does not actually implement >32M partitions)
  5589. --------D-2154-------------------------------
  5590. INT 21 - DOS 2+ - GET VERIFY FLAG
  5591.     AH = 54h
  5592. Return: AL = verify flag
  5593.         00h off
  5594.         01h on (all disk writes verified after writing)
  5595. SeeAlso: AH=2Eh
  5596. --------D-2155-------------------------------
  5597. INT 21 - DOS 2+ internal - CREATE CHILD PSP
  5598.     AH = 55h
  5599.     DX = segment at which to create new PSP
  5600.     SI = (DOS 3+) value to place in memory size field at DX:[0002h]
  5601. Return: CF clear if successful
  5602.  
  5603. Notes:    creates a "child" PSP rather than making an exact copy of the current
  5604.       PSP; the new PSP's parent pointer is set to the current PSP and the
  5605.       reference count for each inherited file is incremented
  5606.     (DOS 2+) sets current PSP to DX
  5607.     (DOS 3+) marks "no inherit" file handles as closed in child PSP
  5608. SeeAlso: AH=26h,AH=50h
  5609. --------D-2156-------------------------------
  5610. INT 21 - DOS 2+ - "RENAME" - RENAME FILE
  5611.     AH = 56h
  5612.     DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
  5613.     ES:DI -> ASCIZ new filename (no wildcards)
  5614.     CL = attribute mask (server call only, see below)
  5615. Return: CF clear if successful
  5616.     CF set on error
  5617.         AX = error code (02h,03h,05h,11h) (see AH=59h)
  5618. Notes:    allows move between directories on same logical volume
  5619.     does not set the archive attribute (see AX=4300h), which results in
  5620.       incremental backups not backing up the file under its new name
  5621.     open files should not be renamed
  5622.     (DOS 3+) allows renaming of directories
  5623.     (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  5624.       error 12h (no more files) is returned on success, and both source and
  5625.       destination specs must be canonical (as returned by AH=60h).
  5626.       Wildcards in the destination are replaced by the corresponding char
  5627.       of each source file being renamed.  Under DOS 3.x, the call will fail
  5628.       if the destination wildcard is *.* or equivalent; under DR-DOS 5.0,
  5629.       the call will fail if any wildcards are used.     When invoked via
  5630.       AX=5D00h, only those files matching the attribute mask in CL are
  5631.       renamed.
  5632.     under the FlashTek X-32 DOS extender, the old-name pointer is in DS:EDX
  5633.       and the new-name pointer is in ES:EDI (DS must equal ES)
  5634. BUG:    under DR-DOS 3.41, this function will generate a new directory entry
  5635.       with the new name (including any wildcards) which can only be removed
  5636.       with a sector editor when invoked via AX=5D00h
  5637. SeeAlso: AH=17h,AX=4301h,AX=5D00h,AH=60h,AH=71h
  5638. --------D-215700-----------------------------
  5639. INT 21 - DOS 2+ - GET FILE'S DATE AND TIME
  5640.     AX = 5700h
  5641.     BX = file handle
  5642. Return: CF clear if successful
  5643.         CX = file's time
  5644.         bits 15-11: hours (0-23)
  5645.              10-5:  minutes
  5646.               4-0:  seconds/2
  5647.         DX = file's date
  5648.         bits 15-9: year - 1980
  5649.               8-5: month
  5650.               4-0: day
  5651.     CF set on error
  5652.         AX = error code (01h,06h) (see AH=59h)
  5653. Note:    under DR-DOS 3.41 and 5.0, this function returns 0 (no date/time) for
  5654.       character devices; MS-DOS returns date and time of opening
  5655. SeeAlso: AX=5701h
  5656. --------D-215701-----------------------------
  5657. INT 21 - DOS 2+ - SET FILE'S DATE AND TIME
  5658.     AX = 5701h
  5659.     BX = file handle
  5660.     CX = new time (see AX=5700h)
  5661.     DX = new date (see AX=5700h)
  5662. Return: CF clear if successful
  5663.     CF set on error
  5664.         AX = error code (01h,06h) (see AH=59h)
  5665. SeeAlso: AX=5700h
  5666. --------D-215702-----------------------------
  5667. INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTES FOR FILE
  5668.     AX = 5702h
  5669.     BX = file handle
  5670.     CX = size of result buffer or 0000h
  5671.     DS:SI -> EAP list (see below)
  5672.     ES:DI -> buffer for returned EAV list (see below)
  5673. Return: CF clear if successful
  5674.         CX = size of returned data
  5675.     CF set on error
  5676.         AX = error code (see AH=59h)
  5677. Desc:    get the current value of one or more extended attributes
  5678. Notes:    if CX=0000h on entry, ES:DI is ignored and no data is actually
  5679.       returned, only the amount of data which is available
  5680.     the default DOS 4 behavior is to return a single word of 0000h (no
  5681.       structures) in the result buffer if CX>=0002h on entry
  5682. SeeAlso: AX=5703h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
  5683.  
  5684. Format of EAP (extended attribute properties) list:
  5685. Offset    Size    Description
  5686.  00h    WORD    number of EAP structures following
  5687.  02h    var    array of EAP structures (see below)
  5688.  
  5689. Format of EAP (extended attribute property) structure:
  5690. Offset    Size    Description
  5691.  00h    BYTE    attribute type
  5692.         01h boolean (either 00h or 01h)
  5693.         02h number (BYTE, WORD, or DWORD)
  5694.         03h string
  5695.         04h date stamp
  5696.         05h time stamp
  5697.  01h    WORD    EAP flags (see below)
  5698.  03h    BYTE    size of reference string (name)
  5699.  04h  N BYTEs    reference string
  5700.  
  5701. Bitfields for EAP flags:
  5702.  bit 12 unchangeable
  5703.  bit 13 ignore
  5704.  bit 14 unchangeable
  5705.  bit 15 used by COMMAND.COM for code page, but not understood by ATTRIB
  5706.  
  5707. Format of EAV (extended attribute value) list:
  5708. Offset    Size    Description
  5709.  00h    WORD    number of EAV structures following
  5710.  02h    var    array of Extended Attribute Value structures
  5711.  
  5712. Format of Extended Attribute Value structures:
  5713. Offset    Size    Description
  5714.  00h  4 BYTEs    ???
  5715.  04h    BYTE    size of reference string
  5716.  05h    WORD    size of value
  5717.  07h    var    reference string
  5718.     var    value
  5719. --------O-215702-----------------------------
  5720. INT 21 - OS/2 v1.1+ Family API - DosQFileInfo
  5721.     AX = 5702h
  5722.     BX = file handle
  5723.     CX = size of buffer for information
  5724.     DX = level of information
  5725.     ES:DI -> buffer for information
  5726. Return: CF clear if successful
  5727.     CF set on error
  5728.         AX = error code
  5729. SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
  5730. --------O-215702BXFFFF-----------------------
  5731. INT 21 - OS/2 v1.1+ Compatibility Box Family API - DosQPathInfo
  5732.     AX = 5702h
  5733.     BX = FFFFh
  5734.     CX = size of buffer for information
  5735.     DX = level of information (0002h)
  5736.     DS:SI -> filename
  5737.     ES:DI -> buffer for information (see below)
  5738. Return: CF clear if successful
  5739.         AL = 00h
  5740.     CF set on error
  5741.         AX = error code
  5742. SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
  5743.  
  5744. Format of path information:
  5745. Offset    Size    Description
  5746.  00h 22 BYTEs    ???
  5747.  16h    DWORD    extended attribute size (none present if less than 5)
  5748. --------D-215703-----------------------------
  5749. INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTE PROPERTIES
  5750.     AX = 5703h
  5751.     BX = file handle
  5752.     CX = size of result buffer or 0000h
  5753.     ES:DI -> result buffer
  5754. Return: CF clear if successful
  5755.         CX = size of returned data
  5756.     CF set on error
  5757.         AX = error code (see AH=59h)
  5758.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  5759. Desc:    get a list of the extended attributes which are defined for the
  5760.       specified file
  5761. Notes:    if CX=0000h on entry, ES:DI is ignored and no data is actually
  5762.       returned, only the amount of data which is available
  5763.     the default DOS 4 behavior is to return a trivial EAP list consisting
  5764.       of the single word 0000h (no EAP structures) if CX>=0002h on entry
  5765. SeeAlso: AX=5702h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
  5766. --------O-215703-----------------------------
  5767. INT 21 - OS/2 v1.1+ Family API - DosSetFileInfo
  5768.     AX = 5703h
  5769.     BX = file handle
  5770.     CX = size of information buffer
  5771.     DX = level of information
  5772.     ES:DI -> information buffer
  5773. Return: CF clear if successful
  5774.     CF set on error
  5775.         AX = error code
  5776. SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
  5777. --------O-215703BXFFFF-----------------------
  5778. INT 21 - OS/2 v1.1+ Family API - DosSetPathInfo
  5779.     AX = 5703h
  5780.     BX = FFFFh
  5781.     CX = size of information buffer
  5782.     DX = level of information
  5783.     DS:SI -> filename
  5784.     ES:DI -> information buffer
  5785. Return: CF clear if successful
  5786.     CF set on error
  5787.         AX = error code
  5788. SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
  5789. --------D-215704-----------------------------
  5790. INT 21 - DOS 4.x only - SET EXTENDED ATTRIBUTES
  5791.     AX = 5704h
  5792.     BX = file handle
  5793.     ES:DI -> EAV list (see AX=5702h)
  5794. Return: CF clear if successful
  5795.     CF set on error
  5796.         AX = error code (see AH=59h)
  5797. Note:    the default DOS 4 behavior is to do nothing and return successfully
  5798. SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
  5799. ----------215757BX5757-----------------------
  5800. INT 21 U - IBM Genie - Resident Manager - INSTALLATION CHECK
  5801.     AX = 5757h
  5802.     BX = 5757h
  5803. Return: AX = 0000h if installed
  5804.         BX = ???
  5805.         DX = ???
  5806.         DS:SI -> list of 27 DWORD entry point addresses
  5807. Program: IBM Genie is a set of utility TSRs by Helix Software
  5808. Note:    other functions possible if BX <> 5757h, but details not yet available
  5809. ----------215758-----------------------------
  5810. INT 21 U - Headroom - API
  5811.     AX = 5758h
  5812.     BL = function
  5813.         00h ???
  5814.         01h get Headroom location
  5815.         Return: CF clear if installed
  5816.                 AX = PSP segment of Headroom TSR
  5817.                 BX = paragraphs of memory used by Headroom
  5818.             CF set if not (normal DOS return)
  5819.         Note:    this function is also used as an installation check
  5820.         02h get INT 21 handler
  5821.         Return: CF clear
  5822.             ES:BX -> Headroom's INT 21 handler
  5823.         Note: also sets unknown flag
  5824.         03h launch application???
  5825.         DS:SI -> 233-byte application record
  5826.         Return: ???
  5827.         04h ???
  5828.         ???
  5829.         Return: CF clear
  5830.         05h get swap directory
  5831.         Return: CF clear
  5832.             DX:AX -> ASCIZ swap directory name
  5833.         06h ???
  5834.         DX = ???
  5835.         Return: CF clear
  5836.         07h ???
  5837.         08h ???
  5838.         09h get current application
  5839.         Return: BX = application number
  5840.         0Ah ???
  5841.         DX = application number
  5842.         DS:SI = ???
  5843.         Return: ???
  5844.         0Bh ???
  5845.         0Ch ???
  5846.         DX = application number
  5847.         ???
  5848.         Return: ???
  5849.         0Dh ???
  5850.         DX = application number
  5851.         ???
  5852.         Return: ???
  5853.         0Eh get ???
  5854.         Return: CF clear
  5855.             AX = ???
  5856.         0Fh set ??? flag
  5857.         10h clear ??? flag
  5858.         11h find application by name
  5859.         DS:SI -> ASCIZ application name
  5860.         Return: CF clear
  5861.             AX = application number or FFFFh if not loaded
  5862.         12h ???
  5863.         DX = application number
  5864.         Return: CF clear
  5865.             ???
  5866.         13h ???
  5867.         Return: CF clear
  5868.         14h ???
  5869.         same as function 13h
  5870.         15h set ???
  5871.         DX = ???
  5872.         16h get ???
  5873.         Return: AX = ??? set by function 15h
  5874.         17h get ???
  5875.         Return: BX = ???
  5876.             CX = ??? (may be pointer in BX:CX)
  5877.         18h BUG: branches incorrectly due to fencepost error
  5878. Program: Headroom is a TSR/task switcher by Helix Software
  5879. SeeAlso: AX=4C57h,AX=5757h
  5880. --------D-2158-------------------------------
  5881. INT 21 - DOS 3+ - GET OR SET MEMORY ALLOCATION STRATEGY
  5882.     AH = 58h
  5883.     AL = subfunction
  5884.         00h get allocation strategy
  5885.         Return: AX = current strategy
  5886.                 00h low memory first fit
  5887.                 01h low memory best fit
  5888.                 02h low memory last fit
  5889.              ---DOS 5+ ---
  5890.                 40h high memory first fit
  5891.                 41h high memory best fit
  5892.                 42h high memory last fit
  5893.                 80h first fit, try high then low memory
  5894.                 81h best fit, try high then low memory
  5895.                 82h last fit, try high then low memory
  5896.         01h set allocation strategy
  5897.         BL = new allocation strategy (see above)
  5898.         BH = 00h (DOS 5+)
  5899. Return: CF clear if successful
  5900.     CF set on error
  5901.         AX = error code (01h) (see AH=59h)
  5902. Notes:    the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
  5903.       2 or greater means last fit
  5904.     the Get subfunction returns the last value set
  5905.     setting an allocation strategy involving high memory does not
  5906.       automatically link in the UMB memory chain; this must be done
  5907.       explicitly with AX=5803h in order to actually allocate high memory
  5908.     a program which changes the allocation strategy should restore it
  5909.       before terminating
  5910.     Toshiba MS-DOS 2.11 supports subfunctions 00h and 01h
  5911.     DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h
  5912. SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh
  5913. --------D-2158-------------------------------
  5914. INT 21 - DOS 5+ - GET OR SET UMB LINK STATE
  5915.     AH = 58h
  5916.     AL = subfunction
  5917.         02h get UMB link state
  5918.         Return: AL = 00h UMBs not part of DOS memory chain
  5919.                = 01h UMBs in DOS memory chain
  5920.         03h set UMB link state
  5921.         BX = 0000h remove UMBs from DOS memory chain
  5922.            = 0001h add UMBs to DOS memory chain
  5923. Return: CF clear if successful
  5924.     CF set on error
  5925.         AX = error code (01h) (see AH=59h)
  5926. Note:    a program which changes the UMB link state should restore it before
  5927.       terminating
  5928. --------v-2158CC-----------------------------
  5929. INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
  5930.     AX = 58CCh
  5931. Return: CF clear if resident
  5932. SeeAlso: AX=5252h,AX=58DDh,AX=6969h
  5933. --------v-2158DD-----------------------------
  5934. INT 21 - VIRUS - "1067"/"Headcrash" - GET ORIGINAL INT 21h VECTOR
  5935.     AX = 58DDh
  5936. Return: CX = code segment of virus
  5937.     ES:BX = old INT 21h vector
  5938. SeeAlso: AX=5252h,AX=58CCh,AX=6969h
  5939. --------D-2159--BX0000-----------------------
  5940. INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION
  5941.     AH = 59h
  5942.     BX = 0000h
  5943. Return: AX = extended error code (see below)
  5944.     BH = error class (see below)
  5945.     BL = recommended action (see below)
  5946.     CH = error locus (see below)
  5947.     ES:DI may be pointer (see error code list below)
  5948.     CL, DX, SI, BP, and DS destroyed
  5949. Notes:    functions available under DOS 2.x map the true DOS 3+ error code into
  5950.       one supported under DOS 2.x
  5951.     you should call this function to retrieve the true error code when an
  5952.       FCB or DOS 2.x call returns an error
  5953.     under DR-DOS 5.0, this function does not use any of the DOS-internal
  5954.       stacks and may thus be called at any time
  5955. SeeAlso: AH=59h/BX=0001h,AX=5D0Ah,INT 2F/AX=122Dh
  5956.  
  5957. Values for extended error code:
  5958.  00h (0)   no error
  5959.  01h (1)   function number invalid
  5960.  02h (2)   file not found
  5961.  03h (3)   path not found
  5962.  04h (4)   too many open files (no handles available)
  5963.  05h (5)   access denied
  5964.  06h (6)   invalid handle
  5965.  07h (7)   memory control block destroyed
  5966.  08h (8)   insufficient memory
  5967.  09h (9)   memory block address invalid
  5968.  0Ah (10)  environment invalid (usually >32K in length)
  5969.  0Bh (11)  format invalid
  5970.  0Ch (12)  access code invalid
  5971.  0Dh (13)  data invalid
  5972.  0Eh (14)  reserved
  5973.  0Fh (15)  invalid drive
  5974.  10h (16)  attempted to remove current directory
  5975.  11h (17)  not same device
  5976.  12h (18)  no more files
  5977. ---DOS 3+---
  5978.  13h (19)  disk write-protected
  5979.  14h (20)  unknown unit
  5980.  15h (21)  drive not ready
  5981.  16h (22)  unknown command
  5982.  17h (23)  data error (CRC)
  5983.  18h (24)  bad request structure length
  5984.  19h (25)  seek error
  5985.  1Ah (26)  unknown media type (non-DOS disk)
  5986.  1Bh (27)  sector not found
  5987.  1Ch (28)  printer out of paper
  5988.  1Dh (29)  write fault
  5989.  1Eh (30)  read fault
  5990.  1Fh (31)  general failure
  5991.  20h (32)  sharing violation
  5992.  21h (33)  lock violation
  5993.  22h (34)  disk change invalid
  5994.     ES:DI -> ASCIZ volume label of required disk
  5995.  23h (35)  FCB unavailable
  5996.  24h (36)  sharing buffer overflow
  5997.  25h (37)  (DOS 4+) code page mismatch
  5998.  26h (38)  (DOS 4+) cannot complete file operation (out of input)
  5999.  27h (39)  (DOS 4+) insufficient disk space
  6000.  28h-31h   reserved
  6001.  32h (50)  network request not supported
  6002.  33h (51)  remote computer not listening
  6003.  34h (52)  duplicate name on network
  6004.  35h (53)  network name not found
  6005.  36h (54)  network busy
  6006.  37h (55)  network device no longer exists
  6007.  38h (56)  network BIOS command limit exceeded
  6008.  39h (57)  network adapter hardware error
  6009.  3Ah (58)  incorrect response from network
  6010.  3Bh (59)  unexpected network error
  6011.  3Ch (60)  incompatible remote adapter
  6012.  3Dh (61)  print queue full
  6013.  3Eh (62)  queue not full
  6014.  3Fh (63)  not enough space to print file
  6015.  40h (64)  network name was deleted
  6016.  41h (65)  network: Access denied
  6017.  42h (66)  network device type incorrect
  6018.  43h (67)  network name not found
  6019.  44h (68)  network name limit exceeded
  6020.  45h (69)  network BIOS session limit exceeded
  6021.  46h (70)  temporarily paused
  6022.  47h (71)  network request not accepted
  6023.  48h (72)  network print/disk redirection paused
  6024.  49h (73)  network software not installed
  6025.        (LANtastic) invalid network version
  6026.  4Ah (74)  unexpected adapter close
  6027.        (LANtastic) account expired
  6028.  4Bh (75)  (LANtastic) password expired
  6029.  4Ch (76)  (LANtastic) login attempt invalid at this time
  6030.  4Dh (77)  (LANtastic v3+) disk limit exceeded on network node
  6031.  4Eh (78)  (LANtastic v3+) not logged in to network node
  6032.  4Fh (79)  reserved
  6033.  50h (80)  file exists
  6034.  51h (81)  reserved
  6035.  52h (82)  cannot make directory
  6036.  53h (83)  fail on INT 24h
  6037.  54h (84)  (DOS 3.3+) too many redirections
  6038.  55h (85)  (DOS 3.3+) duplicate redirection
  6039.  56h (86)  (DOS 3.3+) invalid password
  6040.  57h (87)  (DOS 3.3+) invalid parameter
  6041.  58h (88)  (DOS 3.3+) network write fault
  6042.  59h (89)  (DOS 4+) function not supported on network
  6043.  5Ah (90)  (DOS 4+) required system component not installed
  6044.  64h (100) (MSCDEX) unknown error
  6045.  65h (101) (MSCDEX) not ready
  6046.  66h (102) (MSCDEX) EMS memory no longer valid
  6047.  67h (103) (MSCDEX) not High Sierra or ISO-9660 format
  6048.  68h (104) (MSCDEX) door open
  6049.  
  6050. Values for Error Class:
  6051.  01h    out of resource (storage space or I/O channels)
  6052.  02h    temporary situation (file or record lock)
  6053.  03h    authorization (denied access)
  6054.  04h    internal (system software bug)
  6055.  05h    hardware failure
  6056.  06h    system failure (configuration file missing or incorrect)
  6057.  07h    application program error
  6058.  08h    not found
  6059.  09h    bad format
  6060.  0Ah    locked
  6061.  0Bh    media error
  6062.  0Ch    already exists
  6063.  0Dh    unknown
  6064.  
  6065. Values for Suggested Action:
  6066.  01h    retry
  6067.  02h    delayed retry
  6068.  03h    prompt user to reenter input
  6069.  04h    abort after cleanup
  6070.  05h    immediate abort
  6071.  06h    ignore
  6072.  07h    retry after user intervention
  6073.  
  6074. Values for Error Locus:
  6075.  01h    unknown or not appropriate
  6076.  02h    block device (disk error)
  6077.  03h    network related
  6078.  04h    serial device (timeout)
  6079.  05h    memory related
  6080. --------D-2159--BX0001-----------------------
  6081. INT 21 - European MS-DOS 4.0 - GET HARD ERROR INFORMATION
  6082.     AH = 59h
  6083.     BX = 0001h
  6084. Return: ES:DI -> hard error information packet (see below) for most recent
  6085.         hard (critical) error
  6086. SeeAlso: AH=59h/BX=0000h,AH=95h,INT 24
  6087.  
  6088. Format of hard error information packet:
  6089. Offset    Size    Description
  6090.  00h    WORD    contents of AX at system entry
  6091.  02h    WORD    Process ID which encountered error
  6092.  04h    WORD    contents of AX at time of error
  6093.  06h    BYTE    error type
  6094.         00h physical I/O error
  6095.         01h disk change request
  6096.         02h file sharing violation
  6097.         03h FCB problem
  6098.         04h file locking violation
  6099.         05h bad FAT
  6100.         06h network detected error
  6101.  07h    BYTE    INT 24 error code
  6102.  08h    WORD    extended error code (see AH=59h/BX=0000h)
  6103.  0Ah    DWORD    pointer to associated device
  6104. --------D-215A-------------------------------
  6105. INT 21 - DOS 3+ - CREATE TEMPORARY FILE
  6106.     AH = 5Ah
  6107.     CX = file attribute (see AX=4301h)
  6108.     DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
  6109.         generated filename
  6110. Return: CF clear if successful
  6111.         AX = file handle opened for read/write in compatibility mode
  6112.         DS:DX pathname extended with generated name for temporary file
  6113.     CF set on error
  6114.         AX = error code (03h,04h,05h) (see AH=59h)
  6115. Desc:    creates a file with a unique name which must be explicitly deleted
  6116. BUGS:    COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
  6117.       wraps around to the end of the segment
  6118.     MS-DOS 5.00 revisions A and B and PC-DOS 5.00 revision A reportedly
  6119.       hang the system if the specified path is the root directory and the
  6120.       root directory is full (no free directory entries)
  6121. Note:    under the FlashTek X-32 DOS extender, the path pointer is in DS:EDX
  6122. SeeAlso: AH=3Ch,AH=5Bh
  6123. --------D-215B-------------------------------
  6124. INT 21 - DOS 3+ - CREATE NEW FILE
  6125.     AH = 5Bh
  6126.     CX = file attribute (see AX=4301h)
  6127.     DS:DX -> ASCIZ filename
  6128. Return: CF clear if successful
  6129.         AX = file handle opened for read/write in compatibility mode
  6130.     CF set on error
  6131.         AX = error code (03h,04h,05h,50h) (see AH=59h)
  6132. Notes:    unlike AH=3Ch, this function will fail if the specified file exists
  6133.       rather than truncating it; this permits its use in creating semaphore
  6134.       files because it is an atomic "test and set" operation
  6135.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  6136. SeeAlso: AH=3Ch,AH=5Ah
  6137. --------D-215C-------------------------------
  6138. INT 21 - DOS 3+ - "FLOCK" - RECORD LOCKING
  6139.     AH = 5Ch
  6140.     AL = subfunction
  6141.         00h lock region of file
  6142.         01h unlock region of file
  6143.     BX = file handle
  6144.     CX:DX = start offset of region within file
  6145.     SI:DI = length of region in bytes
  6146. Return: CF clear if successful
  6147.     CF set on error
  6148.         AX = error code (01h,06h,21h,24h) (see AH=59h)
  6149. Notes:    error returned unless SHARE or network installed
  6150.     an unlock call must specify the same region as some prior lock call
  6151.     locked regions become entirely inaccessible to other processes
  6152.     duplicate handles created with AH=45h or AH=46h inherit locks, but
  6153.       handles inherited by child processes (see AH=4Bh) do not
  6154.     under DR-DOS 3.41 and 5.0, if a process opens a file without the no-
  6155.       inherit flag and then starts a child, any locks set by the parent
  6156.       are ignored, and the child will only get an error if it tries to
  6157.       lock an area previously locked by the parent process
  6158. SeeAlso: AX=440Bh,AH=BCh,AH=BEh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
  6159. --------D-215D00-----------------------------
  6160. INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
  6161.     AX = 5D00h
  6162.     DS:DX -> DOS parameter list (see below)
  6163.     DPL contains all register values for a call to INT 21h
  6164. Return: as appropriate for function being called
  6165. Notes:    does not check AH.  Out of range values will crash the system
  6166.     executes using specified computer ID and process ID
  6167.     sharing delay loops skipped
  6168.     a special sharing mode is enabled to handle FCBs opened across network
  6169.     wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h) under
  6170.       MS-DOS; under DR-DOS 3.41, wildcards corrupt the filesystem; and
  6171.       under DR-DOS 5.0-6.0, the call returns error code 03h due to improper
  6172.       support for the server function call (see below)
  6173.     an extra file attribute parameter is enabled for OPEN (AH=3Dh),
  6174.       DELETE (AH=41h), and RENAME (AH=56h)
  6175.     functions which take filenames require canonical names (as returned
  6176.       by AH=60h); this is apparently to prevent multi-hop file forwarding
  6177. BUGS:    the OS/2 2.0 DOS Boot Session incorrectly maps DOS drive letters,
  6178.       seemingly ignoring HPFS drives
  6179.     DR-DOS 5.0-6.0 merely recursively call INT 21 after loading the
  6180.       registers from the DPL, leading to problems for peer-to-peer
  6181.       networks
  6182. SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
  6183.  
  6184. Format of DOS parameter list:
  6185. Offset    Size    Description
  6186.  00h    WORD    AX
  6187.  02h    WORD    BX
  6188.  04h    WORD    CX
  6189.  06h    WORD    DX
  6190.  08h    WORD    SI
  6191.  0Ah    WORD    DI
  6192.  0Ch    WORD    DS
  6193.  0Eh    WORD    ES
  6194.  10h    WORD    reserved (0)
  6195.  12h    WORD    computer ID (0 = current system)
  6196.  14h    WORD    process ID (PSP segment on specified computer)
  6197. Note:    under Windows Enhanced mode, the computer ID is normally the virtual
  6198.       machine ID (see INT 2F/AX=1683h), though this can reportedly be
  6199.       changed by setting UniqueDOSPSP= in SYSTEM.INI
  6200. --------D-215D01-----------------------------
  6201. INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
  6202.     AX = 5D01h
  6203.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  6204.         process ID fields used
  6205. Return: CF set on error
  6206.         AX = error code (see AH=59h)
  6207.     CF clear if successful
  6208. Notes:    flushes buffers and updates directory entries for each file which has
  6209.       been written to; if remote file, calls INT 2F/AX=1107h
  6210.     the computer ID and process ID are stored but ignored under DOS 3.3
  6211.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  6212. SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
  6213. --------D-215D02-----------------------------
  6214. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
  6215.     AX = 5D02h
  6216.     DS:DX -> DOS parameter list (see AX=5D00h), only fields DX, DS,
  6217.         computer ID, and process ID used
  6218.     DPL's DS:DX -> ASCIZ name of file to close
  6219. Return: CF set on error
  6220.         AX = error code (see AH=59h)
  6221.     CF clear if successful
  6222. Notes:    error unless SHARE is loaded (calls [SysFileTable-28h]) (see AH=52h)
  6223.     name must be canonical fully-qualified, such as returned by AH=60h
  6224.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  6225. SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
  6226. --------D-215D03-----------------------------
  6227. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
  6228.     AX = 5D03h
  6229.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID used
  6230. Return: CF set on error
  6231.         AX = error code (see AH=59h)
  6232.     CF clear if successful
  6233. Notes:    error unless SHARE is loaded (calls [SysFileTable-30h]) (see AH=52h)
  6234.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  6235. SeeAlso: AX=5D02h,AX=5D04h
  6236. --------D-215D04-----------------------------
  6237. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
  6238.     AX = 5D04h
  6239.     DS:DX -> DOS parameter list (see AX=5D00h), only computer ID and
  6240.         process ID fields used
  6241. Return: CF set on error
  6242.         AX = error code (see AH=59h)
  6243.     CF clear if successful
  6244. Notes:    error unless SHARE is loaded (calls [SysFileTable-2Ch]) (see AH=52h)
  6245.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  6246. SeeAlso: AX=5D02h,AX=5D03h,INT 2F/AX=111Dh
  6247. --------D-215D05-----------------------------
  6248. INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
  6249.     AX = 5D05h
  6250.     DS:DX -> DOS parameter list (see AX=5D00h)
  6251.     DPL's BX = index of sharing record (see AH=52h)
  6252.     DPL's CX = index of SFT in sharing record's SFT list
  6253. Return: CF clear if successful
  6254.         ES:DI -> ASCIZ filename
  6255.         BX = network machine number of SFT's owner
  6256.         CX = number of locks held by SFT's owner
  6257.     CF set if either index out of range
  6258.         AX = 0012h (no more files)
  6259. Notes:    error unless SHARE is loaded (calls [SysFileTable-18h]) (see AH=52h)
  6260.     names are always canonical fully-qualified, such as returned by AH=60h
  6261.     not supported by DR-DOS 3.41 and 5.0, but does not return an error
  6262. SeeAlso: AH=5Ch,AH=60h
  6263. --------D-215D06-----------------------------
  6264. INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
  6265.     AX = 5D06h
  6266. Return: CF set on error
  6267.        AX = error code (see AH=59h)
  6268.     CF clear if successful
  6269.         DS:SI -> nonreentrant data area (includes all three DOS stacks)
  6270.         (critical error flag is first byte)
  6271.         CX = size in bytes of area which must be swapped while in DOS
  6272.         DX = size in bytes of area which must always be swapped
  6273. Notes:    the Critical Error flag is used in conjunction with the InDOS flag
  6274.       (see AH=34h) to determine when it is safe to enter DOS from a TSR
  6275.     setting CritErr flag allows use of functions 50h/51h from INT 28h under
  6276.       DOS 2.x by forcing use of correct stack
  6277.     swapping the data area allows reentering DOS unless DOS is in a
  6278.       critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
  6279.     under DOS 4.0, AX=5D0Bh should be used instead of this function
  6280.     SHARE and other DOS utilities consult the byte at offset 04h in the
  6281.       DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
  6282.       in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
  6283.     DR-DOS 3.41+ supports this function, but the SDA format beyond the
  6284.       first 18h bytes is completely different from MS-DOS
  6285. SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  6286.  
  6287. Format of DOS 3.10-3.30 Swappable Data Area:
  6288. Offset    Size    Description
  6289.  -34    BYTE    (DOS 3.10+) printer echo flag (00h off, FFh active)
  6290.  -31    BYTE    (DOS 3.30) current switch character
  6291.  -28    BYTE    (DOS 3.30) incremented on each INT 21/AX=5E01h call
  6292.  -27 16 BYTEs    (DOS 3.30) machine name set by INT 21/AX=5E01h
  6293.  -11  5 WORDs    zero-terminated list of offsets which need to be patched to
  6294.         enable critical-section calls (see INT 2A/AH=80h)
  6295.  -1    BYTE    unused padding
  6296. ---start of actual SDA---
  6297.  00h    BYTE    critical error flag ("ErrorMode")
  6298.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  6299.  02h    BYTE    drive on which current critical error occurred, or FFh
  6300.         (DR-DOS sets to drive number during INT 24, 00h otherwise)
  6301.  03h    BYTE    locus of last error
  6302.  04h    WORD    extended error code of last error
  6303.  06h    BYTE    suggested action for last error
  6304.  07h    BYTE    class of last error
  6305.  08h    DWORD    ES:DI pointer for last error
  6306.  0Ch    DWORD    current DTA
  6307.  10h    WORD    current PSP
  6308.  12h    WORD    stores SP across an INT 23
  6309.  14h    WORD    return code from last process termination (zerod after reading
  6310.         with AH=4Dh)
  6311.  16h    BYTE    current drive
  6312.  17h    BYTE    extended break flag
  6313. ---remainder need only be swapped if in DOS---
  6314.  18h    WORD    value of AX on call to INT 21
  6315.  1Ah    WORD    PSP segment for sharing/network
  6316.  1Ch    WORD    network machine number for sharing/network (0000h = us)
  6317.  1Eh    WORD    first usable memory block found when allocating memory
  6318.  20h    WORD    best usable memory block found when allocating memory
  6319.  22h    WORD    last usable memory block found when allocating memory
  6320.  24h    WORD    memory size in paragraphs (used only during initialization)
  6321.  26h    WORD    last entry checked during directory search
  6322.  28h    BYTE    flag: INT 24 returned Fail
  6323.  29h    BYTE    flags: allowable INT 24 actions (passed to INT 24 in AH)
  6324.  2Ah    BYTE    directory flag (00h directory, 01h file)
  6325.  2Bh    BYTE    flag: FFh if Ctrl-Break termination, 00h otherwise
  6326.  2Ch    BYTE    flag: allow embedded blanks in FCB
  6327.  2Dh    BYTE    padding (unused)
  6328.  2Eh    BYTE    day of month
  6329.  2Fh    BYTE    month
  6330.  30h    WORD    year - 1980
  6331.  32h    WORD    number of days since 1-1-1980
  6332.  34h    BYTE    day of week (0 = Sunday)
  6333.  35h    BYTE    flag: console swapped during read from device
  6334.  36h    BYTE    flag: safe to call INT 28 if nonzero
  6335.  37h    BYTE    flag: if nonzero, INT 24 Abort turned into INT 24 Fail
  6336.         (set only during process termination)
  6337.  38h 26 BYTEs    device driver request header (see INT 2F/AX=0802h)
  6338.  52h    DWORD    pointer to device driver entry point (used in calling driver)
  6339.  56h 22 BYTEs    device driver request header for I/O calls
  6340.  6Ch 14 BYTEs    device driver request header for disk status check
  6341.  7Ah    DWORD    pointer to device I/O buffer???
  6342.  7Eh    WORD    ???
  6343.  80h    WORD    ???
  6344.  82h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  6345.  83h    BYTE    padding (unused)
  6346.  84h  3 BYTEs    24-bit user number (see AH=30h)
  6347.  87h    BYTE    OEM number (see AH=30h)
  6348.  88h    WORD    offset to error code conversion table for INT 25/INT 26
  6349.  8Ah  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  6350.  90h    BYTE    device I/O buffer for single-byte I/O functions
  6351.  91h    BYTE    padding??? (unused)
  6352.  92h 128 BYTEs    buffer for filename
  6353. 112h 128 BYTEs    buffer for filename
  6354. 192h 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  6355. 1A7h 32 BYTEs    directory entry for found file (see AH=11h)
  6356. 1C7h 81 BYTEs    copy of current directory structure for drive being accessed
  6357. 218h 11 BYTEs    FCB-format filename for device name comparison
  6358. 223h    BYTE    terminating NUL for above filename
  6359. 224h 11 BYTEs    wildcard destination specification for rename (FCB format)
  6360. 22Fh    BYTE    terminating NUL for above spec
  6361. 230h    BYTE    ???
  6362. 231h    WORD    destination file/directory starting sector
  6363. 233h  5 BYTEs    ???
  6364. 238h    BYTE    extended FCB file attribute
  6365. 239h    BYTE    type of FCB (00h regular, FFh extended)
  6366. 23Ah    BYTE    directory search attributes
  6367. 23Bh    BYTE    file open/access mode
  6368. 23Ch    BYTE    file found/delete flag
  6369.         bit 0: file found
  6370.         bit 4: file deleted
  6371. 23Dh    BYTE    flag: device name found on rename, or file not found
  6372. 23Eh    BYTE    splice flag (file name and directory name together)
  6373. 23Fh    BYTE    flag indicating how DOS function was invoked
  6374.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  6375. 240h    BYTE    sector position within cluster
  6376. 241h    BYTE    flag: translate sector/cluster (00h no, 01h yes)
  6377. 242h    BYTE    flag: 00h if read, 01h if write
  6378. 243h    BYTE    current working drive number
  6379. 244h    BYTE    cluster factor
  6380. 245h    BYTE    flag: cluster split mode
  6381. 246h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  6382. 247h    BYTE    canonicalized filename referred to existing file/dir if FFh
  6383. 248h    BYTE    volume ID flag
  6384. 249h    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  6385. 24Ah    BYTE    file create flag (00h = no)
  6386. 24Bh    BYTE    value with which to replace first byte of deleted file's name
  6387.         (normally E5h, but 00h as described under INT 21/AH=13h)
  6388. 24Ch    DWORD    pointer to Drive Parameter Block for critical error invocation
  6389.         temp: used during process termination
  6390. 250h    DWORD    pointer to stack frame containing user registers on INT 21
  6391. 254h    WORD    stores SP across INT 24
  6392. 256h    DWORD    pointer to DOS Drive Parameter Block for ???
  6393. 25Ah    WORD    saving partial cluster number
  6394. 25Ch    WORD    temp: sector of work current cluster
  6395. 25Eh    WORD    high part of cluster number (only low byte referenced)
  6396. 260h    WORD    ??? temp
  6397. 262h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  6398. 263h    BYTE    padding (unused)
  6399. 264h    DWORD    pointer to device header
  6400. 268h    DWORD    pointer to current SFT
  6401. 26Ch    DWORD    pointer to current directory structure for drive being accessed
  6402. 270h    DWORD    pointer to caller's FCB
  6403. 274h    WORD    number of SFT to which file being opened will refer
  6404. 276h    WORD    temporary storage for file handle
  6405. 278h    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  6406. 27Ch    WORD    offset in DOS DS of first filename argument
  6407. 27Eh    WORD    offset in DOS DS of second filename argument
  6408. 280h    WORD    offset of last component in pathname or FFFFh
  6409. 282h    WORD    offset of transfer address to add
  6410. 284h    WORD    last relative cluster within file being accessed
  6411. 286h    WORD    temp: absolute cluster number being accessed
  6412. 288h    WORD    directory sector number
  6413. 28Ah    WORD    ??? current cluster number
  6414. 28Ch    WORD    ??? current offset in file DIV bytes per sector
  6415. 28Eh    WORD    current sector number
  6416. 290h    WORD    current byte offset within sector
  6417. 292h    DWORD    current offset in file
  6418. 296h    DWORD    temp: file byte count
  6419. 29Ah    WORD    temp: file byte count
  6420. 29Ch    WORD    free file cluster entry
  6421. 29Eh    WORD    last file cluster entry
  6422. 2A0h    WORD    next file cluster number
  6423. 2A2h    DWORD    number of bytes appended to file
  6424. 2A6h    DWORD    pointer to current work disk buffer
  6425. 2AAh    DWORD    pointer to working SFT
  6426. 2AEh    WORD    used by INT 21 dispatcher to store caller's BX
  6427. 2B0h    WORD    used by INT 21 dispatcher to store caller's DS
  6428. 2B2h    WORD    temporary storage while saving/restoring caller's registers
  6429. 2B4h    DWORD    pointer to prev call frame (offset 250h) if INT 21 reentered
  6430.         also switched to for duration of INT 24
  6431. 2B8h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  6432.         (see AH=4Eh)
  6433. 2CDh 32 BYTEs    directory entry for file being renamed (see AH=11h for format)
  6434. 2EDh 331 BYTEs    critical error stack
  6435.    403h     35 BYTEs scratch SFT
  6436. 438h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  6437. 5B8h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  6438. ---DOS 3.2,3.3x only---
  6439. 738h    BYTE    device driver lookahead flag (usually printer) (see AH=64h)
  6440. 739h    BYTE    volume change flag
  6441. 73Ah    BYTE    flag: virtual open
  6442. 73Bh    BYTE    ???
  6443. --------D-215D07-----------------------------
  6444. INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
  6445.     AX = 5D07h
  6446. Return: DL = mode
  6447.         00h redirected output is combined
  6448.         01h redirected output in separate print jobs
  6449. SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
  6450. --------D-215D08-----------------------------
  6451. INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
  6452.     AX = 5D08h
  6453.     DL = mode
  6454.         00h redirected output is combined
  6455.         01h redirected output placed in separate jobs, start new print job
  6456.         now
  6457. SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
  6458. --------D-215D09-----------------------------
  6459. INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
  6460.     AX = 5D09h
  6461. Notes:    forces redirected printer output to be printed, and starts a new print
  6462.       job
  6463.     this function is also supported by 10Net, which calls it Terminate All
  6464.       Spool Jobs, and does not flush if in "combine" mode
  6465. SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
  6466. --------D-215D0A-----------------------------
  6467. INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
  6468.     AX = 5D0Ah
  6469.     DS:DX -> 11-word DOS parameter list (see AX=5D00h)
  6470. Return: nothing.  next call to AH=59h will return values from fields AX,BX,CX,
  6471.       DX,DI, and ES in corresponding registers
  6472. Notes:    documented for DOS 5+, but undocumented in earlier versions
  6473.     the MS-DOS Programmer's Reference incorrectly states that this call was
  6474.       introduced in DOS 4, and fails to mention that the ERROR structure
  6475.       passed to this function is a DOS parameter list.
  6476. BUG:    DR-DOS 3.41 and 5.0 read the value for ES from the DS field of the DPL;
  6477.       fortunately, MS-DOS ignores the DS field, allowing a generic routine
  6478.       which sets both DS and ES fields to the same value
  6479. SeeAlso: AH=59h
  6480. --------D-215D0B-----------------------------
  6481. INT 21 OU - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
  6482.     AX = 5D0Bh
  6483. Return: CF set on error
  6484.         AX = error code (see AH=59h)
  6485.     CF clear if successful
  6486.         DS:SI -> swappable data area list (see below)
  6487. Notes:    copying and restoring the swappable data areas allows DOS to be
  6488.       reentered unless it is in a critical section delimited by calls to
  6489.       INT 2A/AH=80h and INT 2A/AH=81h,82h
  6490.     SHARE and other DOS utilities consult the byte at offset 04h in the
  6491.       DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
  6492.       in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
  6493.     DOS 5+ use the SDA format listed below, but revert back to the DOS 3.x
  6494.       call for finding the SDA (see AX=5D06h)
  6495. SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h,INT 2F/AX=1203h
  6496.  
  6497. Format of DOS 4.x swappable data area list:
  6498. Offset    Size    Description
  6499.  00h    WORD    count of data areas
  6500.  02h  N BYTEs    "count" copies of data area record
  6501.         Offset    Size    Description
  6502.          00h    DWORD    address
  6503.          04h    WORD    length and type
  6504.                 bit 15 set if swap always, clear if swap in DOS
  6505.                 bits 14-0: length in bytes
  6506.  
  6507. Format of DOS 4.0-6.0 swappable data area:
  6508. Offset    Size    Description
  6509.  -34    BYTE    printer echo flag (00h off, FFh active)
  6510.  -31    BYTE    current switch character (ignored by DOS 5+)
  6511.  -28    BYTE    incremented on each INT 21/AX=5E01h call
  6512.  -27 16 BYTEs    machine name set by INT 21/AX=5E01h
  6513.  -11  5 WORDs    zero-terminated list of offsets which need to be patched to
  6514.         enable critical-section calls (see INT 2A/AH=80h)
  6515.         (all offsets are 0D0Ch, but this list is still present for
  6516.         DOS 3.x compatibility)
  6517.  -1    BYTE    unused padding
  6518. ---start of actual SDA---
  6519.  00h    BYTE    critical error flag ("ErrorMode")
  6520.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  6521.  02h    BYTE    drive on which current critical error occurred or FFh
  6522.  03h    BYTE    locus of last error
  6523.  04h    WORD    extended error code of last error
  6524.  06h    BYTE    suggested action for last error
  6525.  07h    BYTE    class of last error
  6526.  08h    DWORD    ES:DI pointer for last error
  6527.  0Ch    DWORD    current DTA
  6528.  10h    WORD    current PSP
  6529.  12h    WORD    stores SP across an INT 23
  6530.  14h    WORD    return code from last process termination (zerod after reading
  6531.         with AH=4Dh)
  6532.  16h    BYTE    current drive
  6533.  17h    BYTE    extended break flag
  6534.  18h    BYTE    flag: code page switching
  6535.  19h    BYTE    flag: copy of previous byte in case of INT 24 Abort
  6536. ---remainder need only be swapped if in DOS---
  6537.  1Ah    WORD    value of AX on call to INT 21
  6538.  1Ch    WORD    PSP segment for sharing/network
  6539.  1Eh    WORD    network machine number for sharing/network (0000h = us)
  6540.  20h    WORD    first usable memory block found when allocating memory
  6541.  22h    WORD    best usable memory block found when allocating memory
  6542.  24h    WORD    last usable memory block found when allocating memory
  6543.  26h    WORD    memory size in paragraphs (used only during initialization)
  6544.  28h    WORD    last entry checked during directory search
  6545.  2Ah    BYTE    flag: nonzero if INT 24 Fail
  6546.  2Bh    BYTE    flags: allowable INT 24 responses (passed to INT 24 in AH)
  6547.  2Ch    BYTE    flag: do not set directory if nonzero
  6548.  2Dh    BYTE    flag: program aborted by ^C
  6549.  2Eh    BYTE    flag: allow embedded blanks in FCB
  6550.  2Fh    BYTE    padding (unused)
  6551.  30h    BYTE    day of month
  6552.  31h    BYTE    month
  6553.  32h    WORD    year - 1980
  6554.  34h    WORD    number of days since 1-1-1980
  6555.  36h    BYTE    day of week (0 = Sunday)
  6556.  37h    BYTE    flag: console swapped during read from device
  6557.  38h    BYTE    flag: safe to call INT 28 if nonzero
  6558.  39h    BYTE    flag: abort currently in progress, turn INT 24 Abort into Fail
  6559.  3Ah 30 BYTEs    device driver request header (see INT 2F/AX=0802h) for
  6560.         device calls
  6561.  58h    DWORD    pointer to device driver entry point (used in calling driver)
  6562.  5Ch 22 BYTEs    device driver request header for I/O calls
  6563.  72h 14 BYTEs    device driver request header for disk status check
  6564.  80h    DWORD    pointer to device I/O buffer
  6565.  84h    WORD    ???
  6566.  86h    WORD    ??? (0)
  6567.  88h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  6568.  89h    DWORD    start offset of file region to lock/unlock
  6569.  8Dh    DWORD    length of file region to lock/unlock
  6570.  91h    BYTE    padding (unused)
  6571.  92h  3 BYTEs    24-bit user number (see AH=30h)
  6572.  95h    BYTE    OEM number (see AH=30h)
  6573.  96h  6 BYTEs    CLOCK$ transfer record (see AH=52h)
  6574.  9Ch    BYTE    device I/O buffer for single-byte I/O functions???
  6575.  9Dh    BYTE    padding???
  6576.  9Eh 128 BYTEs    buffer for filename
  6577. 11Eh 128 BYTEs    buffer for filename
  6578. 19Eh 21 BYTEs    findfirst/findnext search data block (see AH=4Eh)
  6579. 1B3h 32 BYTEs    directory entry for found file (see AH=11h)
  6580. 1D3h 88 BYTEs    copy of current directory structure for drive being accessed
  6581. 22Bh 11 BYTEs    FCB-format filename for device name comparison
  6582. 236h    BYTE    terminating NUL for above filename
  6583. 237h 11 BYTEs    wildcard destination specification for rename (FCB format)
  6584. 242h    BYTE    terminating NUL for above spec
  6585. 243h    BYTE    ???
  6586. 244h    WORD    ???
  6587. 246h  5 BYTEs    ???
  6588. 24Bh    BYTE    extended FCB file attributes
  6589. 24Ch    BYTE    type of FCB (00h regular, FFh extended)
  6590. 24Dh    BYTE    directory search attributes
  6591. 24Eh    BYTE    file open/access mode
  6592. 24Fh    BYTE    ??? flag bits
  6593. 250h    BYTE    flag: device name found on rename, or file not found
  6594. 251h    BYTE    splice flag??? (file name and directory name together)
  6595. 252h    BYTE    flag indicating how DOS function was invoked
  6596.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  6597. 253h    BYTE    ???
  6598. 254h    BYTE    ???
  6599. 255h    BYTE    ???
  6600. 256h    BYTE    ???
  6601. 257h    BYTE    ???
  6602. 258h    BYTE    ???
  6603. 259h    BYTE    ???
  6604. 25Ah    BYTE    canonicalized filename referred to existing file/dir if FFh
  6605. 25Bh    BYTE    ???
  6606. 25Ch    BYTE    type of process termination (00h-03h)
  6607. 25Dh    BYTE    ???
  6608. 25Eh    BYTE    ???
  6609. 25Fh    BYTE    ???
  6610. 260h    DWORD    pointer to Drive Parameter Block for critical error invocation
  6611. 264h    DWORD    pointer to stack frame containing user registers on INT 21
  6612. 268h    WORD    stores SP???
  6613. 26Ah    DWORD    pointer to DOS Drive Parameter Block for ???
  6614. 26Eh    WORD    segment of disk buffer
  6615. 270h    WORD    ???
  6616. 272h    WORD    ???
  6617. 274h    WORD    ???
  6618. 276h    WORD    ???
  6619. 278h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  6620. 279h    BYTE    ??? (doesn't seem to be referenced)
  6621. 27Ah    DWORD    pointer to ???
  6622. 27Eh    DWORD    pointer to current SFT
  6623. 282h    DWORD    pointer to current directory structure for drive being accessed
  6624. 286h    DWORD    pointer to caller's FCB
  6625. 28Ah    WORD    SFT index to which file being opened will refer
  6626. 28Ch    WORD    temporary storage for file handle
  6627. 28Eh    DWORD    pointer to a JFT entry in process handle table (see AH=26h)
  6628. 292h    WORD    offset in DOS DS of first filename argument
  6629. 294h    WORD    offset in DOS DS of second filename argument
  6630. 296h    WORD    ???
  6631. 298h    WORD    ???
  6632. 29Ah    WORD    ???
  6633. 29Ch    WORD    ???
  6634. 29Eh    WORD    ???
  6635. 2A0h    WORD    ???
  6636. 2A2h    WORD    ??? directory cluster number???
  6637. 2A4h    DWORD    ???
  6638. 2A8h    DWORD    ???
  6639. 2ACh    WORD    ???
  6640. 2AEh    DWORD    offset in file???
  6641. 2B2h    WORD    ???
  6642. 2B4h    WORD    bytes in partial sector
  6643. 2B6h    WORD    number of sectors
  6644. 2B8h    WORD    ???
  6645. 2BAh    WORD    ???
  6646. 2BCh    WORD    ???
  6647. 2BEh    DWORD    number of bytes appended to file
  6648. 2C2h    DWORD    pointer to ??? disk buffer
  6649. 2C6h    DWORD    pointer to ??? SFT
  6650. 2CAh    WORD    used by INT 21 dispatcher to store caller's BX
  6651. 2CCh    WORD    used by INT 21 dispatcher to store caller's DS
  6652. 2CEh    WORD    temporary storage while saving/restoring caller's registers
  6653. 2D0h    DWORD    pointer to prev call frame (offset 264h) if INT 21 reentered
  6654.         also switched to for duration of INT 24
  6655. 2D4h    WORD    open mode/action for INT 21/AX=6C00h
  6656. 2D6h    BYTE    ??? (set to 00h by INT 21h dispatcher, 02h when a read is
  6657.         performed, and 01h or 03h by INT 21/AX=6C00h)
  6658. 2D7h    WORD    ??? apparently unused
  6659. 2D9h    DWORD    stored ES:DI for AX=6C00h
  6660. 2DDh    WORD    extended file open action code (see AX=6C00h)
  6661. 2DFh    WORD    extended file open attributes (see AX=6C00h)
  6662. 2E1h    WORD    extended file open file mode (see AX=6C00h)
  6663. 2E3h    DWORD    pointer to filename to open (see AX=6C00h)
  6664. 2E7h    WORD    ???
  6665. 2E9h    WORD    ???
  6666. 2EBh    BYTE    ???
  6667. 2ECh    WORD    stores DS during call to [List-of-Lists + 37h]
  6668. 2EEh    WORD    ???
  6669. 2F0h    BYTE    ???
  6670. 2F1h    WORD    ??? bit flags
  6671. 2F3h    DWORD    pointer to user-supplied filename
  6672. 2F7h    DWORD    pointer to ???
  6673. 2FBh    WORD    stores SS during call to [List-of-Lists + 37h]
  6674. 2FDh    WORD    stores SP during call to [List-of-Lists + 37h]
  6675. 2FFh    BYTE    flag, nonzero if stack switched in calling [List-of-Lists+37h]
  6676. 300h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  6677.         (see AH=4Eh)
  6678. 315h 32 BYTEs    directory entry for file being renamed (see AH=11h)
  6679. 335h 331 BYTEs    critical error stack
  6680. 480h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  6681. 600h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  6682. 780h    BYTE    device driver lookahead flag (usually printer) (see AH=64h)
  6683. 781h    BYTE    volume change flag
  6684. 782h    BYTE    flag: virtual open
  6685. 783h    BYTE    ???
  6686. 784h    WORD    ???
  6687. 786h    WORD    ???
  6688. 788h    WORD    ???
  6689. 78Ah    WORD    ???
  6690. --------D-215E00-----------------------------
  6691. INT 21 - DOS 3.1+ network - GET MACHINE NAME
  6692.     AX = 5E00h
  6693.     DS:DX -> 16-byte buffer for ASCIZ machine name
  6694. Return: CF clear if successful
  6695.         CH = validity
  6696.         00h name invalid
  6697.         nonzero valid
  6698.             CL = NetBIOS number for machine name
  6699.             DS:DX buffer filled with blank-paded name
  6700.     CF set on error
  6701.         AX = error code (01h) (see AH=59h)
  6702. Note:    supported by OS/2 v1.3+ compatibility box, PC-NFS
  6703. SeeAlso: AX=5E01h
  6704. --------N-215E00-----------------------------
  6705. INT 21 - 10NET v5.0 - GET MACHINE NAME
  6706.     AX = 5E00h
  6707. Return: CL = redirector's NetBIOS name number
  6708.     ES:DI -> network node ID
  6709. SeeAlso: AX=5E01h"10NET"
  6710. --------D-215E01CH00-------------------------
  6711. INT 21 - DOS 3.1+ network - SET MACHINE NAME
  6712.     AX = 5E01h
  6713.     CH = 00h undefine name (make it invalid)
  6714.        <> 0     define name
  6715.     CL = name number
  6716.     DS:DX -> 15-character blank-padded ASCIZ name
  6717. SeeAlso: AX=5E00h
  6718. --------N-215E01-----------------------------
  6719. INT 21 - 10NET v5.0 - GET LOCAL 10NET CONFIGURATION TABLE
  6720.     AX = 5E01h
  6721.     CX = length of buffer
  6722.     DS:DX -> buffer for 10Net configuration table
  6723. SeeAlso: AX=5E00h"10NET",INT 6F/AH=02h,INT 6F/AH=03h
  6724.  
  6725. Format of 10Net Configuration Table:
  6726. Offset    Size    Description
  6727.  00h  8 BYTEs    user name
  6728.  08h 15 BYTEs    node ID
  6729.  17h  3 BYTEs    unique portion of Ethernet address
  6730.  1Ah    BYTE    Who group number
  6731.  1Bh    WORD    services mask (see below)
  6732.  1Dh    DWORD    serial number
  6733.  21h    BYTE    maximum concurrent users with same serial number allowed on net
  6734.  22h    BYTE    chat mask (see below)
  6735.  23h    BYTE    internal system bits (see below)
  6736.  24h  9 BYTEs    version number in format MM.mm.xxx
  6737.  2Dh    BYTE    flag: 01h if machine is a PS/2
  6738.  2Eh    BYTE    flag: 03h if 80386
  6739.  2Fh    BYTE    spool termination mode: 01h concatenate, 02h truncate
  6740.         (see AX=5D09h)
  6741.  30h    WORD    autospool timeout in clock ticks
  6742.  32h    WORD    monitor timeout in clock ticks
  6743.  34h    WORD    unused
  6744.  36h    WORD    chat timeout in clock ticks
  6745.  38h    WORD    netBIOS session timeout in half-seconds
  6746.  3Ah    WORD    datagram send timeout in seconds
  6747.  3Ch    WORD    keyboard value for initiating chat mode
  6748.  3Eh    WORD    Who timeout in clock ticks
  6749.  40h    BYTE    flag: 01h if server should process rom NetBIOS Post return
  6750.  41h    BYTE    flag: 01h if FCBs should be recycled
  6751.  42h  3 BYTEs    signature "DBG"
  6752.  45h    BYTE    last interrupt (21h or 6Fh)
  6753.  46h    BYTE    last INT 21 AH value
  6754.  47h    BYTE    last INT 6F AH value
  6755.  48h    WORD    last item posted
  6756.  4Ah    WORD    last item free-posted
  6757.  4Ch    WORD    last item handled by server
  6758.  4Eh    WORD    last redirector send NCB
  6759.  50h    WORD    last redirector receive NCB
  6760.  52h  4 BYTEs    signature "TABL"
  6761.  56h    WORD    offset of datagram buffer table header
  6762.  58h    WORD    offset of chat buffer table header
  6763.  5Ah    WORD    offset of Raw buffer table header
  6764.  5Ch    WORD    offset of Workstation buffer table header
  6765.  5Eh    WORD    offset of server receive-any table header
  6766.  60h    WORD    offset of Tiny buffer table header
  6767.  62h    WORD    offset of zero-length buffer table (NCBs)
  6768.  64h    WORD    offset of Rdr (Redirector Mount) table header
  6769.  66h    WORD    offset of Ntab (Redirector Session) table header
  6770.  68h    WORD    offset of FCB table header
  6771.  6Ah    WORD    offset of user file handle table header
  6772.  6Ch    WORD    offset of workstation printer RDR extension table header
  6773.  6Eh    WORD    offset of server shared device table header
  6774.  70h    WORD    offset of server connection table header
  6775.  72h    WORD    offset of server login table header
  6776.  74h    WORD    offset of server file table header
  6777.  76h    WORD    offset of server shared file table header
  6778.  78h    WORD    offset of server record lock table header
  6779.  7Ah    WORD    offset of remote printer claim table header
  6780.  7Ch    WORD    offset of remote printer device table header
  6781.  7Eh    WORD    offset of print server mount table header
  6782.  80h    WORD    offset of print server sessions table header
  6783.  82h    WORD    offset of print server print job structure table header
  6784.  84h    WORD    offset of print server pooled device table header
  6785.  86h    WORD    size of workstation buffer
  6786.  88h    WORD    size of server receive-any buffer
  6787.  8Ah    WORD    size of server raw I/O buffer
  6788.  8Ch  6 BYTEs    reserved
  6789.  92h    DWORD    pointer to profile pathname
  6790.  96h    BYTE    datagram retry count
  6791.  97h    BYTE    NetBIOS LAN adapter number
  6792.  98h  6 BYTEs    physical Ethernet address
  6793.  9Eh    BYTE    NetBIOS server name number
  6794.  9Fh    BYTE    NetBIOS redirector name number
  6795.  A0h    BYTE    10Net interrupt number
  6796.  A1h    BYTE    flag: chat is loaded
  6797.  A2h    BYTE    flag: INT 6F APIs permanently loaded
  6798.  A3h    BYTE    flag: file security present
  6799.  A4h    WORD    reserved
  6800.  A6h    BYTE    fixed mount bitmask for drives A:-H:
  6801.  A7h    BYTE    reserved
  6802.  A8h    WORD    10Net system flags (see below)
  6803.  AAh    BYTE    monitor flags (see below)
  6804.  ABh  5 BYTEs    reserved
  6805.  B0h    WORD    offset of monitor timer block
  6806.  B2h    WORD    offset of server timer block
  6807.  B4h    WORD    offset of chat timer block
  6808.  B6h    WORD    timer chain
  6809.  B8h  4 BYTEs    signature "TALS"
  6810.  BCh    WORD    number of 10Net sends
  6811.  BEh    WORD    number of 10Net receives
  6812.  C0h    WORD    number of no-buffer conditions
  6813.  C2h    WORD    number of dropped posted messages
  6814.  C4h    WORD    number of server NCB errors
  6815.  C6h    WORD    number of redirector NCB errors
  6816.  C8h    WORD    number of datagram send/receive errors
  6817.  CAh    WORD    number of dropped Whos
  6818.  CCh    WORD    number of dropped submits
  6819.  CEh    WORD    number of session aborts
  6820.  D0h    BYTE    number of NetBIOS interface-busy errors
  6821.  D1h    BYTE    last NetBIOS bad post command
  6822.  D2h    BYTE    last NetBIOS bad redirector command
  6823.  D3h    BYTE    do send datagram send/receive error command
  6824.  D4h    DWORD    -> DOS system parameter table
  6825.  D8h    WORD    number of DOS physical drives
  6826.  DAh    WORD    offset of DOS PSP field in DOS data segment
  6827.  DCh    WORD    offset of in-DOS flag in DOS data segment
  6828.  DEh    WORD    DOS data segment
  6829.  E0h    WORD    offset of DOS SFT in DOS data segment
  6830.  E2h    WORD    offset of number-of-physical-units field in DOS data segment
  6831.  E4h    WORD    10Net code segment
  6832.  E6h    WORD    10Net data segment
  6833.  E8h    WORD    10Net common server segment
  6834.  EAh    WORD    10Net file server segment
  6835.  ECh    WORD    10Net print server segment
  6836.  EEh    WORD    10Net remote printer segment
  6837. Note:    documentation lists field at offset D0h as a WORD, but all following
  6838.       offsets are as though it were a BYTE; if it is indeed a WORD, all
  6839.       offsets after D0h must be increased by one byte
  6840.  
  6841. Format of 10Net Table Header:
  6842. Offset    Size    Description
  6843.  -16  4 BYTEs    table identifier
  6844.  -12    WORD    peak number of tables allocated
  6845.  -10    WORD    number of tables currently in use
  6846.  -8    WORD    total number of tables
  6847.  -6    WORD    size of each table
  6848.  -4    WORD    offset of first allocated table
  6849.  -2    WORD    offset of first free table
  6850.  
  6851. Bitfields for services mask:
  6852.  bit 0    workstation
  6853.  bit 1    file server
  6854.  bit 2    print queue server
  6855.  bit 3    de-spool server
  6856.  
  6857. Bitfields for chat mask:
  6858.  bit 0    chat permitted
  6859.  bit 1    bell enabled
  6860.  bit 2    chat keyboard initiated
  6861.  bit 3    in INT 16 handler
  6862.  bit 4    in Get Input
  6863.  bit 5    display has timed out
  6864.  bit 6    chat is idle
  6865.  
  6866. Bitfields for internal system bits:
  6867.  bit 0    submit permitted
  6868.  bit 1    submit initiated
  6869.  bit 2    submit executing
  6870.  bit 3    internal client call/chat/spool/autospool
  6871.  bit 4    in spool termination
  6872.  bit 5    print permitted
  6873.  bit 6    waiting for keyboard input
  6874.  
  6875. Bitfields for 10Net System Flags:
  6876.  bit 0    in NetBIOS
  6877.  bit 1    processing INT 28
  6878.  bit 2    is server
  6879.  bit 3    in net user-DOS function
  6880.  bit 4    in DOS user-DOS function
  6881.  bit 5    in net for user non-DOS function
  6882.  bit 6    in server DOS function
  6883.  bit 7    in server non-DOS function
  6884.  bit 8    in terminate
  6885.  bit 10    in user on server request
  6886.  bit 13    in DOS for user on server
  6887.  bit 14    disable critical error handler
  6888.  
  6889. Bitfields for Monitor Flags:
  6890.  bit 0    waiting for monitor response
  6891.  bit 4    in monitor get-input routine
  6892.  bit 5    monitor display timeout
  6893.  bit 6    sensing for escape key
  6894. --------D-215E02-----------------------------
  6895. INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
  6896.     AX = 5E02h
  6897.     BX = redirection list index (see AX=5F02h)
  6898.     CX = length of setup string
  6899.     DS:SI -> setup string
  6900. Return: CF clear if successful
  6901.     CF set on error
  6902.         AX = error code (01h) (see AH=59h)
  6903. Note:    also supported by 10NET v5.0
  6904. SeeAlso: AX=5E03h,INT 2F/AX=111Fh
  6905. --------D-215E03-----------------------------
  6906. INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
  6907.     AX = 5E03h
  6908.     BX = redirection list index (see AX=5F02h)
  6909.     ES:DI -> 64-byte buffer for setup string
  6910. Return: CF clear if successful
  6911.         CX = length of setup string
  6912.         ES:DI buffer filled
  6913.     CF set on error
  6914.         AX = error code (01h) (see AH=59h)
  6915. Note:    also supported by 10NET v5.0, but 10NET is documented as using DS:SI
  6916.       instead of ES:DI
  6917. SeeAlso: AX=5E02h,INT 2F/AX=111Fh
  6918. --------D-215E04-----------------------------
  6919. INT 21 - DOS 3.1+ network - SET PRINTER MODE
  6920.     AX = 5E04h
  6921.     BX = redirection list index (see AX=5F02h)
  6922.     DX = mode
  6923.         bit 0: set if binary, clear if text (tabs expanded to blanks)
  6924. Return: CF set on error
  6925.         AX = error code (see AH=59h)
  6926.     CF clear if successful
  6927. Note:    calls INT 2F/AX=111Fh with 5E04h on stack
  6928. SeeAlso: AX=5E05h"DOS",INT 2F/AX=111Fh
  6929. --------N-215E04-----------------------------
  6930. INT 21 - 10NET v5.0 - INITIATE PRINT JOB
  6931.     AX = 5E04h
  6932.     BX = zero-based redirection list index (see AX=5F02h)
  6933.     DS:DX -> extended workstation printer setup structure (see below)
  6934. Return: CF clear if successful
  6935.     CF set on error
  6936.         AX = error code (see AH=59h)
  6937. SeeAlso: AX=5E05h"10NET",AX=5E06h"10NET"
  6938.  
  6939. Format of extended workstation printer setup structure:
  6940. Offset    Size    Description
  6941.  00h    BYTE    notification flags (see below)
  6942.  01h    BYTE    job control mask (see below)
  6943.  02h    WORD    days to retain file
  6944.  04h    WORD    test print length
  6945.  06h    BYTE    number of copies to print
  6946.  07h    BYTE    compression algorithm
  6947.  08h    BYTE    tab width (00h = don't expand)
  6948.  09h    BYTE    initiation type (00h normal, 01h non-spooled)
  6949.  0Ah 38 BYTEs    job start operation notification instructions
  6950.  30h 32 BYTEs    comment for job
  6951.  50h 64 BYTEs    output filename or non-spooled file
  6952.  
  6953. Bitfields for notification flags:
  6954.  bit 0    user at print start
  6955.  bit 1    operator at start, with reply
  6956.  bit 2    user at print completion
  6957.  bit 3    operator at completion, with reply
  6958.  bit 4    user on queue switch
  6959.  bit 5    operator on queue switch, with reply
  6960.  bit 6    user on print error
  6961.  
  6962. Bitfields for job control mask:
  6963.  bit 0    print banner page
  6964.  bit 1    eject page at end of job
  6965.  bit 2    mark as "held" (queue but don't print)
  6966.  bit 3    rush job (queue at top)
  6967.  bit 4    overwrite file with zeros before deletion
  6968.  bit 5    hyperspool if possible
  6969. --------D-215E05-----------------------------
  6970. INT 21 - DOS 3.1+ network - GET PRINTER MODE
  6971.     AX = 5E05h
  6972.     BX = redirection list index (see AX=5F02h)
  6973. Return: CF set on error
  6974.         AX = error code (see AH=59h)
  6975.     CF clear if successful
  6976.         DX = printer mode (see AX=5E04h)
  6977. Note:    calls INT 2F/AX=111Fh with 5E05h on stack
  6978. SeeAlso: AX=5E04h"DOS",INT 2F/AX=111Fh
  6979. --------N-215E05-----------------------------
  6980. INT 21 - 10NET v5.0 - TERMINATE PRINT JOB
  6981.     AX = 5E05h
  6982.     BX = zero-based redirection list index (see AX=5F02h)
  6983. Return: CF clear if successful
  6984.     CF set on error
  6985.         AX = error code (see AH=59h)
  6986. Note:    this call resets the spool termination mode to "truncate"
  6987.       (see AX=5D08h)
  6988. SeeAlso: AX=5E04h"10NET",AX=5E06h
  6989. --------N-215E06-----------------------------
  6990. INT 21 - 10NET v5.0 - GET/SET 10NET WORKSTATION PRINTER SETUP STRUCTURE
  6991.     AX = 5E06h
  6992.     BX = zero-based redirection list index (see AX=5F02h)
  6993.     CX = operation (06h set, 07h get)
  6994.     DS:DX -> buffer for setup structure (same as first nine bytes of
  6995.         workstation printer setup) (see AX=5E04h"10NET")
  6996. Return: CF clear if successful
  6997.         DS:DX buffer updated on get
  6998.     CF set on error
  6999.         AX = error code (see AH=59h)
  7000. SeeAlso: AX=5E04h"10NET",AX=5E05h"10NET"
  7001. --------D-215F00-----------------------------
  7002. INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
  7003.     AX = 5F00h
  7004.     BL = redirection type
  7005.         03h printer
  7006.         04h disk drive
  7007. Return: CF set on error
  7008.         AX = error code (see AH=59h)
  7009.     CF clear if successful
  7010.         BH = redirection state
  7011.         00h off
  7012.         01h on
  7013. Note:    calls INT 2F/AX=111Eh with AX on top of the stack
  7014. SeeAlso: AX=5F01h,INT 2F/AX=111Eh
  7015. --------D-215F01-----------------------------
  7016. INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
  7017.     AX = 5F01h
  7018.     BL = redirection type
  7019.         03h printer
  7020.         04h disk drive
  7021.     BH = redirection state
  7022.         00h off
  7023.         01h on
  7024. Return: CF set on error
  7025.         AX = error code (see AH=59h)
  7026.     CF clear if successful
  7027. Notes:    when redirection is off, the local device (if any) rather than the
  7028.       remote device is used
  7029.     calls INT 2F/AX=111Eh with AX on top of the stack
  7030. SeeAlso: AX=5F00h,INT 2F/AX=111Eh
  7031. --------D-215F02-----------------------------
  7032. INT 21 - DOS 3.1+ network - GET REDIRECTION LIST ENTRY
  7033.     AX = 5F02h
  7034.     BX = zero-based redirection list index
  7035.     CX = 0000h (LANtastic)
  7036.     DS:SI -> 16-byte buffer for ASCIZ local device name
  7037.     ES:DI -> 128-byte buffer for ASCIZ network name
  7038. Return: CF clear if successful
  7039.         BH = device status
  7040.         00h valid
  7041.         01h invalid
  7042.         BL = device type
  7043.         03h printer
  7044.         04h disk drive
  7045.         CX = user data previously set with AX=5F03h
  7046.         DS:SI and ES:DI buffers filled
  7047.         DX,BP destroyed
  7048.     CF set on error
  7049.         AX = error code (01h,12h) (see AH=59h)
  7050. Notes:    this function is passed through to INT 2F/AX=111Eh by the DOS kernel
  7051.     error code 12h is returned if BX is greater than the size of the list
  7052.     also supported by Banyan VINES, PC-NFS, LANtastic, and 10NET
  7053. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  7054. --------D-215F03-----------------------------
  7055. INT 21 - DOS 3.1+ network - REDIRECT DEVICE
  7056.     AX = 5F03h
  7057.     BL = device type
  7058.         03h printer
  7059.         04h disk drive
  7060.     CX = user data to save
  7061.         0000h for LANtastic
  7062.         4E57h ("NW") for NetWare 4.0 requester
  7063.     DS:SI -> ASCIZ local device name (16 bytes max)
  7064.     ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
  7065. Return: CF clear if successful
  7066.     CF set on error
  7067.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  7068. Notes:    if device type is disk drive, DS:SI must point at either a null string
  7069.       or a string consisting the drive letter followed by a colon; if a
  7070.       null string, the network attempts to access the destination without
  7071.       redirecting a local drive
  7072.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  7073.     also supported by Banyan VINES, LANtastic, and 10NET
  7074. SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh
  7075. --------D-215F04-----------------------------
  7076. INT 21 - DOS 3.1+ network - CANCEL REDIRECTION
  7077.     AX = 5F04h
  7078.     DS:SI -> ASCIZ local device name or path
  7079.     CX = 4E57h ("NW") for NetWare 4.0 requester
  7080. Return: CF clear if successful
  7081.     CF set on error
  7082.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see AH=59h)
  7083. Notes:    the DS:SI string must be either a local device name, a drive letter
  7084.       followed by a colon, or a network directory beginning with two
  7085.       backslashes
  7086.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  7087.     also supported by Banyan VINES, LANtastic, and 10NET
  7088. SeeAlso: AX=5F03h,INT 2F/AX=111Eh
  7089. --------D-215F05-----------------------------
  7090. INT 21 - DOS 4+ network - GET EXTENDED REDIRECTION LIST ENTRY
  7091.     AX = 5F05h
  7092.     BX = redirection list index
  7093.     DS:SI -> buffer for ASCIZ source device name
  7094.     ES:DI -> buffer for destination ASCIZ network path
  7095. Return: CF set on error
  7096.         AX = error code (see AH=59h)
  7097.     CF clear if successful
  7098.         AX = server's network process ID handle (10NET)
  7099.         BH = device status flag (bit 0 clear if valid)
  7100.         BL = device type (03h if printer, 04h if drive)
  7101.         CX = stored parameter value (user data) from AX=5F03h
  7102.         BP = NETBIOS local session number
  7103.         DS:SI buffer filled
  7104.         ES:DI buffer filled
  7105. Notes:    the local session number allows sharing the redirector's session number
  7106.     if an error is caused on the NETBIOS LSN, the redirector may be unable
  7107.       to correctly recover from errors
  7108.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  7109.     supported by DR-DOS 5.0
  7110.     also supported by 10NET v5.0
  7111. SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
  7112. --------O-215F05-----------------------------
  7113. INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
  7114.     AX = 5F05h
  7115.     DL = drive number (0=A:)
  7116.     DS:SI -> ASCIZ name of the object to map the drive to
  7117. Return: CF set on error
  7118.         AX = error code (see AH=59h)
  7119.     CF clear if successful
  7120. SeeAlso: AX=5F06h"STARLITE"
  7121. --------N-215F06-----------------------------
  7122. INT 21 U - Network - GET FULL REDIRECTION LIST
  7123.     AX = 5F06h
  7124.     ???
  7125. Return: ???
  7126. Notes:    similar to AX=5F02h and AX=5F05h, but also returns redirections
  7127.       excluded from those calls for various reasons
  7128.     calls INT 2F/AX=111Eh with AX on top of the stack
  7129. SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh
  7130. --------O-215F06-----------------------------
  7131. INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
  7132.     AX = 5F06h
  7133.     DL = drive to be unmapped (0=A:)
  7134. Return: CF set on error
  7135.         AX = error code (see AH=59h)
  7136.     CF clear if successful
  7137. SeeAlso: AX=5F05h"STARLITE"
  7138. --------D-215F07-----------------------------
  7139. INT 21 - DOS 5+ - ENABLE DRIVE
  7140.     AX = 5F07h
  7141.     DL = drive number (0=A:)
  7142. Return: CF clear if successful
  7143.     CF set on error
  7144.         AX = error code (0Fh) (see AH=59h)
  7145. Note:    simply sets the "valid" bit in the drive's CDS
  7146. SeeAlso: AH=52h,AX=5F08h"DOS"
  7147. --------O-215F07-----------------------------
  7148. INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
  7149.     AX = 5F07h
  7150.     DS:SI -> ASCIZ name of object to offer to network
  7151.     ES:DI -> ASCIZ name under which object will be known on the network
  7152.         MUST begin with three slashes
  7153. Return: CF set on error
  7154.         AX = error code (see AH=59h)
  7155.     CF clear if successful
  7156. SeeAlso: AX=5F08h"STARLITE"
  7157. --------D-215F08-----------------------------
  7158. INT 21 - DOS 5+ - DISABLE DRIVE
  7159.     AX = 5F08h
  7160.     DL = drive number (0=A:)
  7161. Return: CF clear if successful
  7162.     CF set on error
  7163.         AX = error code (0Fh) (see AH=59h)
  7164. Note:    simply clears the "valid" bit in the drive's CDS
  7165. SeeAlso: AH=52h,AX=5F07h"DOS"
  7166. --------O-215F08-----------------------------
  7167. INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
  7168.     AX = 5F08h
  7169.     DS:SI -> ASCIZ network name (not local name) of object to unshare
  7170. Return: CF set on error
  7171.         AX = error code (see AH=59h)
  7172.     CF clear if successful
  7173. SeeAlso: AX=5F07h"STARLITE"
  7174. --------O-215F09-----------------------------
  7175. INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
  7176.     AX = 5F09h
  7177.     DS:DX -> ASCIZ name of the device driver to attach to
  7178. Return: CF set on error
  7179.         AX = error code (see AH=59h)
  7180.     CF clear if successful
  7181. Note:    the STARLITE distributed file system can attach to multiple networks
  7182.       simultaneously
  7183. SeeAlso: AX=5F0Ah
  7184. --------O-215F0A-----------------------------
  7185. INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
  7186.     AX = 5F0Ah
  7187.     DS:DX -> ASCIZ name of device driver to detach from
  7188. Return: CF set on error
  7189.         AX = error code (see AH=59h)
  7190.     CF clear if successful
  7191. SeeAlso: AX=5F09h
  7192. --------N-215F30-----------------------------
  7193. INT 21 U - LAN Manager Enhanced DOS - ???
  7194.     AX = 5F30h
  7195.     ???
  7196. Return: ???
  7197. --------N-215F32-----------------------------
  7198. INT 21 u - Named Pipes - LOCAL DosQNmPipeInfo
  7199.     AX = 5F32h
  7200.     BX = handle
  7201.     CX = size of _PIPEINFO structure
  7202.     DX = level (must be 0001h)
  7203.     DS:SI -> _PIPEINFO structure (see below)
  7204. Return: CF clear if successful
  7205.         _PIPEINFO structure filled in
  7206.     CF set on error
  7207.         AX = error code
  7208. Note:    this function was introduced by LAN Manager but is also supported by
  7209.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  7210.       Machines, and others
  7211. SeeAlso: AX=5F33h,AX=5F34h
  7212.  
  7213. Format of _PIPEINFO structure:
  7214. Offset    Size    Description
  7215.  00h    WORD    size of outgoing buffer
  7216.  02h    WORD    size of incoming buffer
  7217.  04h    BYTE    maximum number of instances allowed
  7218.  05h    BYTE    current number of instances
  7219.  06h    BYTE    length of the name (including terminating NUL)
  7220.  07h  N BYTEs    name
  7221. --------N-215F33-----------------------------
  7222. INT 21 u - Named Pipes - LOCAL DosQNmPHandState
  7223.     AX = 5F33h
  7224.     BX = handle
  7225. Return: CF clear if successful
  7226.         AH = pipe mode bit mask (see below)
  7227.         AL = maximum number of instances
  7228.     CF set on error
  7229.         AX = error code
  7230. Note:    this function was introduced by LAN Manager but is also supported by
  7231.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  7232.       Machines, and others
  7233. SeeAlso: AX=5F32h,AX=5F34h
  7234.  
  7235. Bitfields for pipe mode:
  7236.  bit 7    set if nonblocking, clear if blocking
  7237.  bit 6    set if server end, clear if client end
  7238.  bit 2    set if write in message mode, clear if write in byte mode
  7239.  bit 0    set if read in message mode, clear if read in byte mode
  7240. --------N-215F34-----------------------------
  7241. INT 21 u - Named Pipes - LOCAL DosSetNmPHandState
  7242.     AX = 5F34h
  7243.     BX = handle
  7244.     CX = pipe mode bit mask
  7245.         bit 15: set if nonblocking, clear if blocking
  7246.         bit     8: set if read in message mode, clear if read in byte mode
  7247. Return: CF clear if successful
  7248.     CF set if error
  7249.         AX = error code
  7250. Note:    this function was introduced by LAN Manager but is also supported by
  7251.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  7252.       Machines, and others
  7253. SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
  7254. --------N-215F35-----------------------------
  7255. INT 21 u - Named Pipes - LOCAL DosPeekNmPipe
  7256.     AX = 5F35h
  7257.     BX = handle
  7258.     CX = buffer length
  7259.     DS:SI -> buffer
  7260. Return: CF clear if successful
  7261.         CX = bytes read
  7262.         SI = bytes left in the pipe
  7263.         DX = bytes left in the current message
  7264.         DI = pipe status
  7265.         0001h disconnected
  7266.         0002h listening
  7267.         0003h connected
  7268.         0004h closing
  7269.     CF set if error
  7270.         AX = error code
  7271. Note:    this function was introduced by LAN Manager but is also supported by
  7272.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  7273.       Machines, and others
  7274. SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h
  7275. --------N-215F36-----------------------------
  7276. INT 21 u - Named Pipes - LOCAL DosTransactNmPipe
  7277.     AX = 5F36h
  7278.     BX = handle
  7279.     CX = in buffer length
  7280.     DS:SI -> in buffer
  7281.     DX = out buffer length
  7282.     ES:DI -> out buffer
  7283. Return: CF clear if successful
  7284.         CX = bytes read
  7285.     CF set on error
  7286.         AX = error code
  7287. Note:    this function was introduced by LAN Manager but is also supported by
  7288.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  7289.       Machines, and others
  7290. SeeAlso: AX=5F34h,AX=5F37h
  7291. --------N-215F37-----------------------------
  7292. INT 21 u - Named Pipes - DosCallNmPipe
  7293.     AX = 5F37h
  7294.     DS:SI -> DosCallNmPipe stack frame (see below)
  7295. Return: CF clear if successful
  7296.         CX = bytes read
  7297.     CF set on error
  7298.         AX = error code
  7299. Note:    this function was introduced by LAN Manager but is also supported by
  7300.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  7301.       Machines, and others
  7302. SeeAlso: AX=5F36h,AX=5F38h
  7303.  
  7304. Format of DosCallNmPipe stack frame:
  7305. Offset    Size    Description
  7306.  00h    DWORD    timeout
  7307.  04h    DWORD    -> bytes read WORD (not used!!)
  7308.  08h    WORD    out buffer length
  7309.  0Ah    DWORD    address of out buffer
  7310.  0Eh    WORD    in buffer length
  7311.  10h    DWORD    address of in buffer
  7312.  14h    DWORD    address of pipe name
  7313. --------N-215F38-----------------------------
  7314. INT 21 u - Named Pipes - LOCAL DosWaitNmPipe - AWAIT AVAIL. OF PIPE INSTANCE
  7315.     AX = 5F38h
  7316.     DS:DX -> pipe name
  7317.     BX:CX = timeout value
  7318. Return: CF clear if successful
  7319.     CF set if error
  7320.         AX = error code
  7321. Notes:    when a client gets a return code of ERROR_PIPE_BUSY on attempting to
  7322.       open a pipe, it should issue this call to wait until the pipe
  7323.       instance becomes available again; on return from this call, the
  7324.       client must attempt to open the pipe once again
  7325.     this function was introduced by LAN Manager but is also supported by
  7326.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  7327.       Machines, and others
  7328. SeeAlso: AX=5F37h,AX=5F39h
  7329. --------N-215F39-----------------------------
  7330. INT 21 U - Named Pipes - LOCAL DosRawReadNmPipe
  7331.     AX = 5F39h
  7332.     BX = handle
  7333.     CX = buffer length
  7334.     DS:DX -> buffer
  7335. Return: CF clear if successful
  7336.         CX = bytes read
  7337.     CF set if error
  7338.         AX = error code
  7339. Notes:    this function was introduced by LAN Manager but is also supported by
  7340.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  7341.       Machines, and others
  7342.     not documented in the LAN Manager Toolkit
  7343. SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
  7344. --------N-215F3A-----------------------------
  7345. INT 21 U - Named Pipes - LOCAL DosRawWriteNmPipe
  7346.     AX = 5F3Ah
  7347.     BX = handle
  7348.     CX = buffer length
  7349.     DS:DX -> buffer
  7350. Return: CF clear if successful
  7351.         CX = bytes written
  7352.     CF set if error
  7353.         AX = error code
  7354. Notes:    this function was introduced by LAN Manager but is also supported by
  7355.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  7356.       Machines, and others
  7357.     not documented in the LAN Manager Toolkit
  7358. SeeAlso: AX=5F39h,AX=5F3Bh,INT 2F/AX=118Fh
  7359. --------N-215F3B-----------------------------
  7360. INT 21 u - LAN Manager Enhanced DOS - NetHandleSetInfo
  7361.     AX = 5F3Bh
  7362.     BX = handle
  7363.     CX = handle_info_1 structure length or sizeof DWORD
  7364.     DI = parameter number to set
  7365.         0000h all
  7366.         0001h number of milliseconds
  7367.         0002h number of characters
  7368.     DS:DX -> handle_info_1 structure (DI=0000h) (see below)
  7369.         or DWORD (DI=0001h or 0002h)
  7370.     SI = level of information (0001h)
  7371. Return: CF clear if successful
  7372.         CX = total bytes available
  7373.     CF set if error
  7374.         AX = error code
  7375. SeeAlso: AX=5F3Ch
  7376.  
  7377. Format of handle_info_1 structure:
  7378. Offset    Size    Description
  7379.  00h    DWORD    number of milliseconds which workstation collects data before
  7380.         it sends the data to the named pipe
  7381.  04h    DWORD    number of characters which workstation collects before it
  7382.         sends the data to the named pipe
  7383. --------N-215F3C-----------------------------
  7384. INT 21 u - LAN Manager Enhanced DOS - NetHandleGetInfo
  7385.     AX = 5F3Ch
  7386.     BX = handle
  7387.     CX = length of handle_info_1 structure
  7388.     DS:DX -> handle_info_1 structure (see AX=5F3Bh)
  7389.     SI = level of information (must be 0001h)
  7390. Return: CF clear if successful
  7391.         CX = total bytes available
  7392.     CF set if error
  7393.         AX = error code
  7394. SeeAlso: AX=5F3Bh
  7395. --------N-215F3D-----------------------------
  7396. INT 21 U - LAN Manager Enhanced DOS - WRITE MAILSLOT???
  7397.     AX = 5F3Dh
  7398.     ???
  7399. Return: ???
  7400. --------N-215F3E-----------------------------
  7401. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetSpecialSMB
  7402.     AX = 5F3Eh
  7403.     ???
  7404. Return: ???
  7405. Note:    This function is not documented anywhere in the LAN Manager 2.x Toolkit
  7406.       but was documented in LAN Manager 1.x manuals.
  7407. --------N-215F3F-----------------------------
  7408. INT 21 U - LAN Manager Enhanced DOS - REMOTE API CALL
  7409.     AX = 5F3Fh
  7410.     CX = api number
  7411.     ES:DI -> data descriptor
  7412.     ES:SI -> parameter descriptor
  7413.     ES:DX -> auxiliary descriptor (if DX <> 0)
  7414.     ???
  7415. Return: ???
  7416. --------N-215F40-----------------------------
  7417. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetMessageBufferSend
  7418.     AX = 5F40h
  7419.     DS:DX -> NetMessageBufferSend parameter structure (see below)
  7420. Return: AX = error code
  7421.  
  7422. Format of NetMessageBufferSend parameter structure:
  7423. Offset    Size    Description
  7424.  00h    DWORD    -> recipient name (name for specific user, name* for domain
  7425.             wide name, * for broadcast)
  7426.  04h    DWORD    -> buffer
  7427.  08h    WORD    length of buffer
  7428. --------N-215F41-----------------------------
  7429. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceEnum
  7430.     AX = 5F41h
  7431.     BL = level of detail (0000h, 0001h or 0002h)
  7432.     CX = buffer length
  7433.     ES:DI -> buffer of service_info_0, service_info_1, or service_info_2
  7434.         (see below)
  7435. Return: CF clear if successful
  7436.         CX = entries read
  7437.         DX = total available
  7438.     CF set on error
  7439.         AX = error code
  7440.  
  7441. Format of service_info_0 structure:
  7442. Offset    Size    Description
  7443.  00h 16 BYTEs    name
  7444.  
  7445. Format of service_info_1 structure:
  7446. Offset    Size    Description
  7447.  00h 16 BYTEs    name
  7448.  10h    WORD    status bitmask (see below)
  7449.  12h    DWORD    status code (see below)
  7450.         (also see Microsoft LAN Manager Programmer's Reference)
  7451.  16h    WORD    process id
  7452.  
  7453. Format of service_info_2 structure:
  7454. Offset    Size    Description
  7455.  00h 16 BYTEs    name
  7456.  10h    WORD    status bitmask (see below)
  7457.  12h    DWORD    status code (see below)
  7458.  16h    WORD    process id
  7459.  18h 64 BYTEs    text
  7460.  
  7461. Bitfields for status bitmask:
  7462.  bits 0,1    00 uninstall
  7463.         01 install pending
  7464.         10 uninstall pending
  7465.         11 installed
  7466.  bits 2,3    00 active
  7467.         01 Continue pending
  7468.         10 Pause pending
  7469.         11 paused
  7470.  bit 4    uninstallable
  7471.  bit 5    pausable
  7472.  bit 8    disk redirector paused
  7473.  bit 9    spooled device redirector paused (printing)
  7474.  bit 10 communication device redirector paused
  7475.  
  7476. Values for status code:
  7477.  high word
  7478.     3051 Bad parameter value
  7479.     3052 A parameter is missing
  7480.     3053 An unknown parameter was specified
  7481.     3054 The resource is insufficient
  7482.     3055 Configuration is faulty
  7483.     3056 An MS-DOS or MS OS/2 error occured
  7484.     3057 An internal error occured
  7485.     3058 An ambiguous parameter name was given
  7486.     3059 A duplicate parameter exists
  7487.     3060 The service was terminated by NetSeviceControl when it did not respond
  7488.     3061 The service program file could not be executed
  7489.     3062 The subservice failed to start
  7490.     3063 There is a conflict in the value or use of these parameters
  7491.     3064 There is a problem with the file
  7492.  low word
  7493.     3070 There is insufficient memory
  7494.     3071 There is insufficeient disk space
  7495.     3072 Unable to create thread
  7496.     3073 Unable to create process
  7497.     3074 A security failure occured
  7498.     3075 There is bad or missing default path
  7499.     3076 Network software is not installed
  7500.     3077 Server software is not installed
  7501.     3078 The server could not access the UAS database
  7502.     3079 The action requires user-level security
  7503.     3080 The log directory is invalid
  7504.     3081 The LAN group specificed could not be used
  7505.     3082 The computername is being used as a message alias on another computer
  7506.     3083 The workstation failed to announce the servername
  7507.     3084 The user accounts system is not configured properly
  7508. --------N-215F42-----------------------------
  7509. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceControl
  7510.     AX = 5F42h
  7511.     DH = opcode
  7512.         00h interrogate status
  7513.         01h pause
  7514.         02h continue
  7515.         03h uninstall
  7516.     DL = argument
  7517.         01h disk resource
  7518.         02h print resource
  7519.         04h communications resource (not implemented for DOS)
  7520.     ES:BX -> NetServiceControl parameter structure (see below)
  7521. Return: CF clear if successful
  7522.     CF set on error
  7523.         AX = error code
  7524.  
  7525. Format of NetServiceControl parameter structure:
  7526. Offset    Size    Description
  7527.  00h    DWORD    -> service name
  7528.  04h    WORD    result buffer size
  7529.  06h    DWORD    -> result buffer as service_info_2 structure
  7530. --------N-215F43-----------------------------
  7531. INT 21 u - LAN Manager Enhanced DOS - LOCAL DosPrintJobGetId
  7532.     AX = 5F43h
  7533.     BX = handle of remote print job
  7534.     CX = size of PRIDINFO struture
  7535.     ES:DI -> PRIDINFO structure (see below)
  7536. Return: CF clear if successful
  7537.         PRIDINFO filled in
  7538.     CF set on error
  7539.         AX = error code
  7540.  
  7541. Format of PRIDINFO structure:
  7542. Offset    Size    Description
  7543.  00h    WORD    job id
  7544.  02h 16 BYTEs    server name
  7545.  12h 13 BYTEs    queue name
  7546.  1Fh  1 BYTE    pad
  7547. --------N-215F44-----------------------------
  7548. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaGetInfo
  7549.     AX = 5F44h
  7550.     BX = information level (00h, 01h, or 0Ah)
  7551.     CX = buffer size
  7552.     ES:DI -> buffer in which to store info
  7553. Return: AX = error code
  7554.     DX = amount of buffer used (or required)
  7555. SeeAlso: AX=5F45h,AX=5F49h
  7556. --------N-215F45-----------------------------
  7557. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaSetInfo
  7558.     AX = 5F45h
  7559.     BX = level (0000h or 0001h)
  7560.     CX = buffer size
  7561.     DX = parameter to set
  7562.     ES:DI -> buffer
  7563. Return: CF clear if successful
  7564.     CF set if error
  7565.         AX = error code
  7566. SeeAlso: AX=5F44h
  7567. --------N-215F46-----------------------------
  7568. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseEnum
  7569.     AX = 5F46h
  7570.     BX = level (0000h or 0001h)
  7571.     CX = size of buffer
  7572.     ES:DI -> buffer of use_info_0 or use_info_1 structures (see below)
  7573. Return: CF clear if successful
  7574.         CX = entries read
  7575.         DX = total available entries
  7576.     CF set if error
  7577.         AX = error code
  7578. SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch
  7579.  
  7580. Format of use_info_0 structure:
  7581. Offset    Size    Description
  7582.  00h  9 BYTEs    local device name
  7583.  09h    BYTE    padding
  7584.  0Ah    DWORD    -> remote device name in UNC form \\server\share
  7585.  
  7586. Format of use_info_1 structure:
  7587. Offset    Size    Description
  7588.  00h  9 BYTEs    Local device name
  7589.  09h    BYTE    padding
  7590.  0Ah    DWORD    -> remote device name in UNC form \\server\share
  7591.  0Eh    DWORD    -> password
  7592.  12h    WORD    ignored
  7593.  14h    WORD    use type (-1 wildcard, 0 disk, 1 print, 2 com, 3 ipc)
  7594.  16h    WORD    ignored
  7595.  18h    WORD    ignored
  7596. --------N-215F47-----------------------------
  7597. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseAdd
  7598.     AX = 5F47h
  7599.     BX = level (0001h)
  7600.     CX = size of use_info_1 structure
  7601.     ES:DI -> use_info_1 structure (see AX=5F46h)
  7602. Return: CF clear on success
  7603.     CF set on error
  7604.         AX = error code
  7605. SeeAlso: AX=5F46h,AX=5F48h
  7606. --------N-215F48-----------------------------
  7607. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseDel
  7608.     AX = 5F48h
  7609.     BX = force level
  7610.         0000h no force
  7611.         0001h force
  7612.         0002h lots of force
  7613.     ES:DI -> buffer as either the local device name or UNC remote name
  7614. Return: CF clear on success
  7615.     CF set on error
  7616.         AX = error code
  7617. SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h
  7618. --------N-215F49-----------------------------
  7619. INT 21 u - LAN Manager Enhanced DOS - NetUseGetInfo
  7620.     AX = 5F49h
  7621.     DS:DX -> NetUseGetInfo parameter structure
  7622. Return: CF clear on success
  7623.         DX = total available
  7624.     CF set on error
  7625.         AX = error code
  7626. SeeAlso: AX=5F44h,AX=5F47h
  7627.  
  7628. Format of NetUseGetInfo parameter structure:
  7629. Offset    Size    Description
  7630.  00h    DWORD    pointer to either the local device name or UNC remote name
  7631.  04h    WORD    level of information (0000h or 0001h)
  7632.  06h    DWORD    pointer to buffer of use_info_0 or use_info_1 structures
  7633.  0Ah    WORD    length of buffer
  7634. --------N-215F4A-----------------------------
  7635. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteCopy
  7636.     AX = 5F4Ah
  7637.     DS:DX -> NetRemoteCopy parameter structure
  7638. Return: CF clear if successful
  7639.     CF set on error
  7640.         AX = error code
  7641. SeeAlso: AX=5F4Bh
  7642.  
  7643. Format of NetRemoteCopy parameter structure:
  7644. Offset    Size    Description
  7645.  00h    DWORD    -> source name as UNC
  7646.  04h    DWORD    -> destination name as UNC
  7647.  08h    DWORD    -> source password
  7648.  0Ch    DWORD    -> destination password
  7649.  10h    WORD    destination open bitmap
  7650.         if destination path exists
  7651.             0000h open fails
  7652.             0001h file is appended
  7653.             0002h file is overwritten
  7654.         if destination path doesn't exist
  7655.             0000h open fails
  7656.             0010h file is created
  7657.  12h    WORD    copy control bitmap (see below)
  7658.  14h    DWORD    -> copy_info buffer
  7659.  18h    WORD    length of copy_info buffer
  7660.  
  7661. Bitfields for copy control:
  7662.  bit 0    destination must be a file
  7663.  bit 1    destination must be a directory
  7664.  bit 2    destination is opened in ascii mode instead of binary
  7665.  bit 3    source is opened in ascii mode instead of binary
  7666.  bit 4    verify all write operations
  7667. --------N-215F4B-----------------------------
  7668. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteMove
  7669.     AX = 5F4Bh
  7670.     DS:DX -> NetRemoteMove parameter structure
  7671. Return: CF clear if successful
  7672.     CF set on error
  7673.         AX = error code
  7674. SeeAlso: AX=5F4Ah
  7675.  
  7676. Format of NetRemoteMove parameter structure:
  7677. Offset    Size    Description
  7678.  00h    DWORD    -> source name as UNC
  7679.  04h    DWORD    -> destination name as UNC
  7680.  08h    DWORD    -> source password
  7681.  0Ch    DWORD    -> destination password
  7682.  10h    WORD    destination open bitmap
  7683.         if destination path exists
  7684.             0000h open fails
  7685.             0001h file is appended
  7686.             0002h file is overwritten
  7687.         if destination path doesn't exist
  7688.             0000h open fails
  7689.             0010h file is created
  7690.  12h    WORD    move control bitmap
  7691.             0001h destination must be a file
  7692.             0002h destination must be a directory
  7693.  14h    DWORD    -> move_info buffer
  7694.  18h    WORD    length of move_info buffer
  7695. --------N-215F4C-----------------------------
  7696. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServerEnum
  7697.     AX = 5F4Ch
  7698.     BX = level (0000h or 0001h)
  7699.     CX = buffer length
  7700.     ES:DI -> buffer in which to store information
  7701. Return: CF clear if successful
  7702.         ES:DI -> server_info_X structures (depending on level) (see below)
  7703.         BX = entries read
  7704.         CX = total entries available
  7705.     CF set on error
  7706.         AX = error code
  7707. Notes:    this function is also supported by the Novell DOS Named Pipe Extender
  7708.     this function has been obseleted by NetServerEnum2
  7709. SeeAlso: AX=5F53h
  7710.  
  7711. Format of server_info_0 structure:
  7712. Offset    Size    Description
  7713.  00h 16 BYTEs    name
  7714.  
  7715. Format of server_info_1 structure:
  7716. Offset    Size    Description
  7717.  00h 16 BYTEs    name
  7718.  10h    BYTE    major version in lower nibble
  7719.  11h    BYTE    minor version
  7720.  12h    DWORD    server type bitmask (see below)
  7721.  16h    DWORD    -> comment string
  7722.  
  7723. Bitfields for server type:
  7724.  bit 0    workstation
  7725.  bit 1    server
  7726.  bit 2    SQL server
  7727.  bit 3    primary domain controller
  7728.  bit 4    backup domain controller
  7729.  bit 5    time server
  7730.  bit 6    Apple File Protocol (AFP) server
  7731.  bit 7    Novell server
  7732.  bit 8    Domain Member (v2.1+)
  7733.  bit 9    Print Queue server (v2.1+)
  7734.  bit 10 Dialin server (v2.1+)
  7735.  bit 11 Unix server (v2.1+)
  7736. --------N-215F4D-----------------------------
  7737. INT 21 u - LAN Manager Enhanced DOS - DosMakeMailslot
  7738.     AX = 5F4Dh
  7739.     BX = message size
  7740.     CX = mailslot size (must be bigger than message size by at least 1)
  7741.                (minimum 1000h, maximum FFF6h)
  7742.                (buffer must be 9 bytes bigger than this)
  7743.     DS:SI -> name
  7744.     ES:DI -> memory buffer
  7745. Return: CF clear if successful
  7746.         AX = handle
  7747.     CF set on error
  7748.         AX = error code
  7749. SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h
  7750. --------N-215F4E-----------------------------
  7751. INT 21 u - LAN Manager Enhanced DOS - DosDeleteMailslot
  7752.     AX = 5F4Eh
  7753.     BX = handle
  7754. Return: CF clear if successful
  7755.         ES:DI -> memory to be freed (allocated during DosMakeMailslot)
  7756.     CF set on error
  7757.         AX = error code
  7758. SeeAlso: AX=5F4Dh,AX=5F4Fh
  7759. --------N-215F4F-----------------------------
  7760. INT 21 u - LAN Manager Enhanced DOS - DosMailslotInfo
  7761.     AX = 5F4Fh
  7762.     BX = handle
  7763. Return: CF clear if successful
  7764.         AX = max message size
  7765.         BX = mailslot size
  7766.         CX = next message size
  7767.         DX = next message priority
  7768.         SI = number of messages waiting
  7769.     CF set on error
  7770.         AX = error code
  7771. SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h
  7772. --------N-215F50-----------------------------
  7773. INT 21 u - LAN Manager Enhanced DOS - DosReadMailslot
  7774.     AX = 5F50h
  7775.     BX = handle
  7776.     DX:CX = timeout
  7777.     ES:DI -> buffer
  7778. Return: CF clear if successful
  7779.         AX = bytes read
  7780.         CX = next item's size
  7781.         DX = next item's priority
  7782.     CF set on error
  7783.         AX = error code
  7784. SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h
  7785. --------N-215F51-----------------------------
  7786. INT 21 u - LAN Manager Enhanced DOS - DosPeekMailslot
  7787.     AX = 5F51h
  7788.     BX = handle
  7789.     ES:DI -> buffer
  7790. Return: CF clear if successful
  7791.         AX = bytes read
  7792.         CX = next item's size
  7793.         DX = next item's priority
  7794.     CF set on error
  7795.         AX = error code
  7796. SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h
  7797. --------N-215F52-----------------------------
  7798. INT 21 u - LAN Manager Enhanced DOS - DosWriteMailslot
  7799.     AX = 5F52h
  7800.     BX = class
  7801.     CX = length of buffer
  7802.     DX = priority
  7803.     ES:DI -> DosWriteMailslot parameter structure (see below)
  7804.     DS:SI -> mailslot name
  7805. Return: CF clear if successful
  7806.     CF set on error
  7807.         AX = error code
  7808. SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h
  7809.  
  7810. Format of DosWriteMailslot parameter structure:
  7811. Offset    Size    Description
  7812.  00h    DWORD    timeout
  7813.  04h    DWORD    -> buffer
  7814. --------N-215F53-----------------------------
  7815. INT 21 u - LAN Manager Enhanced DOS - NetServerEnum2
  7816.     AX = 5F53h
  7817.     DS:SI -> NetServerEnum2 parameter structure (see below)
  7818. Return: CF clear if successful
  7819.         BX = entries read
  7820.         CX = total entries available
  7821.     CF set on error
  7822.         AX = error code
  7823. SeeAlso: AX=5F4Ch
  7824.  
  7825. Format of NetServerEnum2 parameter structure:
  7826. Offset    Size    Description
  7827.  00h    WORD    level (0000h or 0001h)
  7828.  02h    DWORD    -> buffer as array of server_info_??? structures
  7829.  06h    WORD    length of buffer
  7830.  08h    DWORD    server type bitmask (see below)
  7831.  0Ch    DWORD    -> Domain name (may be 0000h:0000h for all local domains)
  7832.  
  7833. Bitfields for server type:
  7834.  bit 0    workstation
  7835.  bit 1    server
  7836.  bit 2    SQL server
  7837.  bit 3    primary domain controller
  7838.  bit 4    backup domain controller
  7839.  bit 5    time server
  7840.  bit 6    Apple File Protocol (AFP) server
  7841.  bit 7    Novell server
  7842.  bit 8    Domain Member (v2.1+)
  7843.  bit 9    Print Queue server (v2.1+)
  7844.  bit 10 Dialin server (v2.1+)
  7845.  bit 11 Unix server (v2.1+)
  7846. Note:    set all bits (FFFFFFFFh) for All Types
  7847.  
  7848. Format of server_info_0 structure:
  7849. Offset    Size    Description
  7850.  00h 16 BYTEs    name
  7851.  
  7852. Format of server_info_1 structure:
  7853. Offset    Size    Description
  7854.  00h 16 BYTEs    name
  7855.  10h    BYTE    major version in lower nibble
  7856.  11h    BYTE    minor version
  7857.  12h    DWORD    server type (bits 0-11) (see above)
  7858.  16h    DWORD    -> comment string
  7859. --------N-215F55----------------------------
  7860. INT 21 U - LAN Manager Enhanced DOS - KILL ALL CONNECTIONS???
  7861.     AX = 5F55h
  7862.     BX = ???
  7863. Return: CF clear if successful
  7864.     CF set on error
  7865.         AX = error code
  7866. --------N-215F80-----------------------------
  7867. INT 21 - LANtastic - GET LOGIN ENTRY
  7868.     AX = 5F80h
  7869.     BX = login entry index (0-based)
  7870.     ES:DI -> 16-byte buffer for machine name
  7871. Return: CF clear if successful
  7872.         buffer filled with machine name ("\\" prefix removed)
  7873.         DL = adapter number (v3+)
  7874.     CF set on error
  7875.         AX = error code
  7876. Note:    the login entry index corresponds to the value BX used in AX=5F83h
  7877. SeeAlso: AX=5F83h
  7878. --------N-215F81-----------------------------
  7879. INT 21 - LANtastic - LOGIN TO SERVER
  7880.     AX = 5F81h
  7881.     ES:DI -> ASCIZ login path followed immediately by ASCIZ password
  7882.     BL = adapter number
  7883.         FFh try all valid adapters
  7884.         00h-07h try only specified adapter
  7885. Return: CF clear if successful
  7886.     CF set on error
  7887.         AX = error code
  7888. Notes:    login path is of form "\\machine\username"
  7889.     if no password is used, the string at ES:DI must be terminated with
  7890.       three NULs for compatibility with LANtastic v3.0.
  7891. SeeAlso: AX=5F82h,AX=5F84h
  7892. --------N-215F82-----------------------------
  7893. INT 21 - LANtastic - LOGOUT FROM SERVER
  7894.     AX = 5F82h
  7895.     ES:DI -> ASCIZ server name (in form "\\machine")
  7896. Return: CF clear if successful
  7897.     CF set on error
  7898.         AX = error code
  7899. SeeAlso: AX=5F81h,AX=5F88h,AX=5FCBh
  7900. --------N-215F83-----------------------------
  7901. INT 21 - LANtastic - GET USERNAME ENTRY
  7902.     AX = 5F83h
  7903.     BX = login entry index (0-based)
  7904.     ES:DI -> 16-byte buffer for username currently logged into
  7905. Return: CF clear if successful
  7906.         DL = adapter number (v3+)
  7907.     CF set on error
  7908.         AX = error code
  7909. Note:    the login entry index corresponds to the value BX used in AX=5F80h
  7910. SeeAlso: AX=5F80h
  7911. --------N-215F84-----------------------------
  7912. INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
  7913.     AX = 5F84h
  7914.     BX = server index not currently logged into
  7915.     ES:DI -> 16-byte buffer for server name which is available for logging
  7916.         in to ("\\" prefix omitted)
  7917. Return: CF clear if successful
  7918.         DL = adapter number to non-logged in server is on
  7919.     CF set on error
  7920.         AX = error code
  7921. SeeAlso: AX=5F81h
  7922. --------N-215F85-----------------------------
  7923. INT 21 - LANtastic - CHANGE PASSWORD
  7924.     AX = 5F85h
  7925.     ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
  7926. Return: CF clear if successful
  7927.     CF set on error
  7928.         AX = error code
  7929. Notes:    must be logged into the named machine
  7930.     this function is illegal for group accounts
  7931. --------N-215F86-----------------------------
  7932. INT 21 - LANtastic - DISABLE ACCOUNT
  7933.     AX = 5F86h
  7934.     ES:DI -> ASCIZ machine name and password in form "\\machine\password"
  7935. Return: CF clear if successful
  7936.     CF set on error
  7937.         AX = error code
  7938. Note:    must be logged into the named machine and concurrent logins set to 1
  7939.       by NET_MGR.  Requires system manager to re-enable account.
  7940. --------N-215F87-----------------------------
  7941. INT 21 - LANtastic v3+ - GET ACCOUNT
  7942.     AX = 5F87h
  7943.     DS:SI -> 128-byte buffer for account information (see below)
  7944.     ES:DI -> ASCIZ machine name in form "\\machine"
  7945. Return: CF clear if successful
  7946.     CF set on error
  7947.         AX = error code
  7948.     BX destroyed
  7949. Note:    must be logged into the specified machine
  7950.  
  7951. Format of user account structure:
  7952. Offset    Size    Description
  7953.  00h 16 BYTEs    blank-padded username (zero-padded for v4.x)
  7954.  10h 16 BYTEs    reserved (00h)
  7955.  20h 32 BYTEs    user description
  7956.  40h    BYTE    privilege bits (see below)
  7957.  41h    BYTE    maximum concurrent users
  7958.  42h 42 BYTEs    bit map for disallowed half hours, beginning on Sunday
  7959.         (bit set if half-hour not an allowed time)
  7960.  6Ch    WORD    internal (0002h)
  7961.  6Eh  2 WORDs    last login time
  7962.  72h  2 WORDs    account expiration date (MS-DOS-format year/month:day)
  7963.  76h  2 WORDs    password expiration date (0 = none)
  7964.  7Ah    BYTE    number of days to extend password after change (1-31)
  7965.         00h if no extension required
  7966. ---v3.x---
  7967.  7Bh  5 BYTEs    reserved
  7968. ---v4.x---
  7969.  7Bh    BYTE    storage for first letter of user name when deleted (first
  7970.         character is changed to 00h when deleting account)
  7971.  7Ch    BYTE    extended privileges
  7972.  7Dh  3 BYTEs    reserved
  7973.  
  7974. Bitfields for privilege bits:
  7975.  bit 7    bypass access control lists
  7976.  bit 6    bypass queue protection
  7977.  bit 5    treat as local process
  7978.  bit 4    bypass mail protection
  7979.  bit 3    allow audit entry creation
  7980.  bit 2    system manager
  7981.  bit 0    user cannot change password
  7982. --------N-215F88-----------------------------
  7983. INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS
  7984.     AX = 5F88h
  7985. Return: CF clear if successful
  7986.     CF set on error
  7987.         AX = error code
  7988. SeeAlso: AX=5F82h
  7989. --------N-215F97-----------------------------
  7990. INT 21 - LANtastic - COPY FILE
  7991.     AX = 5F97h
  7992.     CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
  7993.     SI = source file handle
  7994.     DI = destination file handle
  7995. Return: CF clear if successful
  7996.         DX:AX = number of bytes copied
  7997.     CF set on error
  7998.         AX = error code
  7999. Note:    copy is performed by server
  8000. --------N-215F98-----------------------------
  8001. INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
  8002.     AX = 5F98h
  8003.     DS:SI -> message buffer (see below)
  8004. Return: CF clear if successful
  8005.     CF set on error
  8006.         AX = error code
  8007. Note:    v4.1- return no errors
  8008. SeeAlso: AX=5F99h
  8009.  
  8010. Format of message buffer:
  8011. Offset    Size    Description
  8012.  00h    BYTE    reserved
  8013.  01h    BYTE    message type
  8014.         00h general
  8015.         01h server warning
  8016.         02h-7Fh reserved
  8017.         80h-FFh user-defined
  8018.  02h 16 BYTEs    ASCIZ destination machine name
  8019.  12h 16 BYTEs    ASCIZ server name which user must be logged into
  8020.  22h 16 BYTEs    ASCIZ user name
  8021.  32h 16 BYTEs    ASCIZ originating machine name (filled in when received)
  8022.  42h 80 BYTEs    message text
  8023. --------N-215F99-----------------------------
  8024. INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
  8025.     AX = 5F99h
  8026.     ES:DI -> messsage buffer (see AX=5F98h for format)
  8027. Return: CF clear if successful
  8028.     CF set on error
  8029.         AX = error code
  8030. SeeAlso: AX=5F98h
  8031. --------N-215F9A-----------------------------
  8032. INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
  8033.     AX = 5F9Ah
  8034. Return: CF clear if successful
  8035.         DL = bits describing processing for received unsolicited messages
  8036.         bit 0: beep before message is delivered
  8037.         bit 1: deliver message to message service
  8038.         bit 2: pop up message automatically (v3+)
  8039.     CF set on error
  8040.         AX = error code
  8041. SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh
  8042. --------N-215F9B-----------------------------
  8043. INT 21 - LANtastic - SET MESSAGE PROCESSING FLAGS
  8044.     AX = 5F9Bh
  8045.     DL = bits describing processing for received unsolicited messages
  8046.          (see AX=5F9Ah)
  8047. Return: CF clear if successful
  8048.     CF set on error
  8049.         AX = error code
  8050. SeeAlso: AX=5F9Ah,AX=5F9Eh
  8051. --------N-215F9C-----------------------------
  8052. INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
  8053.     AX = 5F9Ch
  8054.     CX = time to leave on screen in clock ticks
  8055.     DH = 0-based screen line on which to place message
  8056. Return: CF clear if successful
  8057.     CF set on error
  8058.         AX = error code (0Bh)
  8059. Notes:    the original screen contents are restored when the message is removed
  8060.     the message will not appear, and an error will be returned, if the
  8061.       screen is in a graphics mode
  8062. SeeAlso: AX=5F9Ah
  8063. --------N-215F9D-----------------------------
  8064. INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS
  8065.     AX = 5F9Dh
  8066. Return: DL = redirector control bits
  8067.         bit 7: set to notify on print job completion
  8068. SeeAlso: AX=5F9Ah,AX=5F9Eh
  8069. --------N-215F9E-----------------------------
  8070. INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS
  8071.     AX = 5F9Eh
  8072.     DL = redirector control bits (see AX=5F9Dh)
  8073. Return: nothing
  8074. SeeAlso: AX=5F9Bh,AX=5F9Dh
  8075. --------N-215FA0-----------------------------
  8076. INT 21 - LANtastic - GET QUEUE ENTRY
  8077.     AX = 5FA0h
  8078.     BX = queue entry index (0000h is first entry)
  8079.     DS:SI -> buffer for queue entry (see below)
  8080.     ES:DI -> ASCIZ server name in form "\\name"
  8081. Return: CF clear if successful
  8082.     CF set on error
  8083.         AX = error code
  8084.     BX = entry index for next queue entry (BX-1 is current index)
  8085. SeeAlso: AX=5FA1h,AX=5FA2h
  8086.  
  8087. Values for status of entry:
  8088.  00h    empty
  8089.  01h    being updated
  8090.  02h    being held
  8091.  03h    waiting for despool
  8092.  04h    being despooled
  8093.  05h    canceled
  8094.  06h    spooled file could not be accessed
  8095.  07h    destination could not be accessed
  8096.  08h    rush job
  8097.  
  8098. Values for type of entry:
  8099.  00h    printer queue file
  8100.  01h    message
  8101.  02h    local file
  8102.  03h    remote file
  8103.  04h    to remote modem
  8104.  05h    batch processor file
  8105.  
  8106. Format of queue entry:
  8107. Offset    Size    Description
  8108.  00h    BYTE    status of entry (see above)
  8109.  01h    DWORD    size of spooled file
  8110.  05h    BYTE    type of entry (see above)
  8111.  06h    BYTE    output control
  8112.         bit 6: don't delete (for mail)
  8113.         bit 5: mail file contains voice mail (v3+)
  8114.         bit 4: mail message has been read
  8115.         bit 3: response has been requested for this mail
  8116.  07h    WORD    number of copies
  8117.  09h    DWORD    sequence number of queue entry
  8118.  0Dh 48 BYTEs    pathname of spooled file
  8119.  3Dh 16 BYTEs    user who spooled file
  8120.  4Dh 16 BYTEs    name of machine from which file was spooled
  8121.  5Dh    WORD    date file was spooled (see AX=5700h)
  8122.  5Fh    WORD    time file was spooled (see AX=5700h)
  8123.  61h 17 BYTEs    ASCIZ destination device or user name
  8124.  72h 48 BYTEs    comment field
  8125. --------N-215FA1-----------------------------
  8126. INT 21 - LANtastic - SET QUEUE ENTRY
  8127.     AX = 5FA1h
  8128.     BX = handle of opened queue entry
  8129.     DS:SI -> queue entry (see AX=5FA0h)
  8130. Return: CF clear if successful
  8131.     CF set on error
  8132.         AX = error code
  8133. Notes:    the only queue entry fields which may be changed are output control,
  8134.       number of copies, destination device, and comment
  8135.     the handle in BX is that from a create or open (INT 21/AH=3Ch,3Dh)
  8136.       call on the file "\\server\\@MAIL" or "\\server\@name" (for
  8137.       printer queue entries)
  8138. SeeAlso: AX=5FA0h,AX=5FA2h,AX=5FA9h
  8139. --------N-215FA2-----------------------------
  8140. INT 21 - LANtastic - CONTROL QUEUE
  8141.     AX = 5FA2h
  8142.     BL = control command
  8143.         00h start despooling (privileged)
  8144.         01h halt despooling (privileged)
  8145.         02h halt despooling at end of job (privileged)
  8146.         03h pause despooler at end of job (privileged)
  8147.         04h print single job (privileged)
  8148.         05h restart current job (privileged)
  8149.         06h cancel the current job
  8150.         07h hold queue entry
  8151.         08h release a held queue entry
  8152.         09h make queue entry a rushed job (privileged)
  8153.     CX:DX = sequence number to control (commands 06h-09h)
  8154.     DX = physical printer number (commands 00h-05h)
  8155.         00h-02h LPT1-LPT3
  8156.         03h,04h COM1,COM2
  8157.         other    all printers
  8158.     ES:DI -> ASCIZ server name in form "\\machine"
  8159. Return: CF clear if successful
  8160.     CF set on error
  8161.         AX = error code
  8162. --------N-215FA3-----------------------------
  8163. INT 21 - LANtastic v3+ - GET PRINTER STATUS
  8164.     AX = 5FA3h
  8165.     BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
  8166.     DS:SI -> buffer for printer status (see below)
  8167.     ES:DI -> ASCIZ server name in form "\\machine"
  8168. Return: CF clear if successful
  8169.     CF set on error
  8170.         AX = error code
  8171.     BX = next physical printer number
  8172. Note:    you must be logged in to the specified server
  8173.  
  8174. Format of printer status:
  8175. Offset    Size    Description
  8176.  00h    BYTE    printer state
  8177.         bit 7: printer paused
  8178.         bits 0-6: 0 printer disabled
  8179.               1 will stop at end of job
  8180.               2 print multiple jobs
  8181.  01h    WORD    queue index of print job being despooled
  8182.         FFFFh if not despooling--ignore all following fields
  8183.  03h    WORD    actual characters per second being output
  8184.  05h    DWORD    number of characters actually output so far
  8185.  09h    DWORD    number of bytes read from spooled file so far
  8186.  0Dh    WORD    copies remaining to print
  8187. --------N-215FA4-----------------------------
  8188. INT 21 - LANtastic v3+ - GET STREAM INFO
  8189.     AX = 5FA4h
  8190.     BX = 0-based stream index number
  8191.     DS:SI -> buffer for stream information (see below)
  8192.     ES:DI -> ASCIZ machine name in form "\\machine"
  8193. Return: CF clear if successful
  8194.     CF set on error
  8195.         AX = error code
  8196.     BX = next stream number
  8197. SeeAlso: AX=5FA5h
  8198.  
  8199. Format of stream information:
  8200. Offset    Size    Description
  8201.  00h    BYTE    queueing of jobs for logical printer (0=disabled,other=enabled)
  8202.  01h 11 BYTEs    logical printer resource template (may contain ? wildcards)
  8203. --------N-215FA5-----------------------------
  8204. INT 21 - LANtastic v3+ - SET STREAM INFO
  8205.     AX = 5FA5h
  8206.     BX = 0-based stream index number
  8207.     DS:SI -> buffer containing stream information (see AX=5FA4h)
  8208.     ES:DI -> ASCIZ machine name in form "\\machine"
  8209. Return: CF clear if successful
  8210.     CF set on error
  8211.         AX = error code
  8212. SeeAlso: AX=5FA4h
  8213. --------N-215FA7-----------------------------
  8214. INT 21 - LANtastic - CREATE USER AUDIT ENTRY
  8215.     AX = 5FA7h
  8216.     DS:DX -> ASCIZ reason code (max 8 bytes)
  8217.     DS:SI -> ASCIZ variable reason string (max 128 bytes)
  8218.     ES:DI -> ASCIZ machine name in form "\\machine"
  8219. Return: CF clear if successful
  8220.     CF set on error
  8221.         AX = error code
  8222. Note:    you must be logged in to the specified server and have the "U"
  8223.       privilege to execute this call
  8224. --------N-215FA9-----------------------------
  8225. INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY
  8226.     AX = 5FA9h
  8227.     BX = handle of opened queue entry
  8228.     DS:SI -> queue entry (see AX=5FA0h)
  8229. Return: CF clear if successful
  8230.     CF set on error
  8231.         AX = error code
  8232. Note:    functions exactly the same as AX=5FA1h except the spooled filename is
  8233.       also set.  This call supports direct despooling.
  8234. SeeAlso: AX=5FA1h
  8235. --------N-215FB0-----------------------------
  8236. INT 21 - LANtastic - GET ACTIVE USER INFORMATION
  8237.     AX = 5FB0h
  8238.     BX = server login entry index
  8239.     DS:SI -> buffer for active user entry (see below)
  8240.     ES:DI -> ASCIZ machine name in form "\\server"
  8241. Return: CF clear if successful
  8242.     CF set on error
  8243.         AX = error code
  8244.     BX = next login index
  8245. SeeAlso: AX=5FB2h
  8246.  
  8247. Format of active user entry:
  8248. Offset    Size    Description
  8249.  00h    WORD    virtual circuit number
  8250.  02h    BYTE    login state (see below)
  8251.  03h    BYTE    last command issued (see below)
  8252.  04h  5 BYTEs    number of I/O bytes (40-bit unsigned number)
  8253.  09h  3 BYTEs    number of server requests (24-bit unsigned)
  8254.  0Ch 16 BYTEs    name of user who is logged in
  8255.  1Ch 16 BYTEs    name of remote logged in machine
  8256.  2Ch    BYTE    extended privileges (v4+???)
  8257.         bit 0: user cannot change his password
  8258.  2Dh    WORD    time left in minutes (0000h = unlimited) (v4+???)
  8259.  
  8260. Bitfields for login state:
  8261.  bit 0    fully logged in
  8262.  bit 1    remote program load login
  8263.  bit 2    user has system manager privileges
  8264.  bit 3    user can create audit entries
  8265.  bit 4    bypass mail protection
  8266.  bit 5    treat as local process
  8267.  bit 6    bypass queue protection
  8268.  bit 7    bypass access control lists
  8269.  
  8270. Values for last command:
  8271.  00h    login
  8272.  01h    process termination
  8273.  02h    open file
  8274.  03h    close file
  8275.  04h    create file
  8276.  05h    create new file
  8277.  06h    create unique file
  8278.  07h    commit data to disk
  8279.  08h    read file
  8280.  09h    write file
  8281.  0Ah    delete file
  8282.  0Bh    set file attributes
  8283.  0Ch    lock byte range
  8284.  0Dh    unlock byte range
  8285.  0Eh    create subdirectory
  8286.  0Fh    remove subdirectory
  8287.  10h    rename file
  8288.  11h    find first matching file
  8289.  12h    find next matching file
  8290.  13h    get disk free space
  8291.  14h    get a queue entry
  8292.  15h    set a queue entry
  8293.  16h    control the queue
  8294.  17h    return login information
  8295.  18h    return link description
  8296.  19h    seek on file
  8297.  1Ah    get server's time
  8298.  1Bh    create audit entry
  8299.  1Ch    open file in multitude of modes
  8300.  1Dh    change password
  8301.  1Eh    disable account
  8302.  1Fh    local server file copy
  8303. ---v3+---
  8304.  20h    get username from account file
  8305.  21h    translate server's logical path
  8306.  22h    make indirect file
  8307.  23h    get indirect file contents
  8308.  24h    get physical printer status
  8309.  25h    get logical print stream info
  8310.  26h    set logical print stream info
  8311.  27h    get user's account record
  8312. ---v4+---
  8313.  28h    request server shutdown
  8314.  29h    cancel server shutdown
  8315.  2Ah    stuff server's keyboard
  8316.  2Bh    write then commit data to disk
  8317.  2Ch    set extended queue entry
  8318.  2Dh    terminate user from server
  8319.  2Eh    enable/disable logins
  8320.  2Fh    flush server caches
  8321.  30h    change username
  8322.  31h    get extended queue entry
  8323.     (same as get queue, but can return named fields blanked)
  8324. --------N-215FB1-----------------------------
  8325. INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
  8326.     AX = 5FB1h
  8327.     DS:SI -> 64-byte buffer for link description
  8328.     ES:DI -> ASCIZ machine and shared directory name in form
  8329.          "\\machine\shared-resource"
  8330. Return: CF clear if successful
  8331.         CX = access control list privileges for requesting user (see below)
  8332.     CF set on error
  8333.         AX = error code
  8334.  
  8335. Bitfields for access control list:
  8336.  bit 4    (I) allow expansion of indirect files
  8337.  bit 5    (A) allow attribute changing
  8338.  bit 6    (P) allow physical access to device
  8339.  bit 7    (E) allow program execution
  8340.  bit 8    (N) allow file renaming
  8341.  bit 9    (K) allow directory deletion
  8342.  bit 10 (D) allow file deletion
  8343.  bit 11 (L) allow file/directory lookups
  8344.  bit 12 (M) allow directory creation
  8345.  bit 13 (C) allow file creation
  8346.  bit 14 (W) allow open for write and writing
  8347.  bit 15 (R) allow open for read and reading
  8348. --------N-215FB2-----------------------------
  8349. INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
  8350.     AX = 5FB2h
  8351.     BX = username entry index (0 for first)
  8352.     DS:SI -> 16-byte buffer for username
  8353.     ES:DI -> ASCIZ server name in form "\\machine"
  8354. Return: CF clear if successful
  8355.     CF set on error
  8356.         AX = error code
  8357.     BX = next queue entry index
  8358. SeeAlso: AX=5FB0h
  8359. --------N-215FB3-----------------------------
  8360. INT 21 - LANtastic v3+ - TRANSLATE PATH
  8361.     AX = 5FB3h
  8362.     DS:SI -> 128-byte buffer for ASCIZ result
  8363.     ES:DI -> full ASCIZ path, including server name
  8364.     DX = types of translation to be performed
  8365.         bit 0: expand last component as indirect file
  8366.         bit 1: return actual path relative to server's physical disk
  8367. Return: CF clear if successful
  8368.     CF set on error
  8369.         AX = error code
  8370. Note:    always expands any indirect files along the path
  8371. SeeALso: AX=5FB4h,INT 21/AH=60h
  8372. --------N-215FB4-----------------------------
  8373. INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
  8374.     AX = 5FB4h
  8375.     DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
  8376.     ES:DI -> full ASCIZ path of indirect file to create, incl machine name
  8377. Return: CF clear if successful
  8378.     CF set on error
  8379.         AX = error code
  8380. Note:    the contents of the indirect file may be any valid server-relative path
  8381. SeeAlso: AX=5FB3h,AX=5FB5h
  8382. --------N-215FB5-----------------------------
  8383. INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
  8384.     AX = 5FB5h
  8385.     DS:SI -> 128-byte buffer for ASCIZ indirect file contents
  8386.     ES:DI -> full ASCIZ path of indirect file
  8387. Return: CF clear if successful
  8388.     CF set on error
  8389.         AX = error code
  8390. SeeAlso: AX=5FB4h
  8391. --------N-215FB6-----------------------------
  8392. INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS
  8393.     AX = 5FB6h
  8394.     ES:DI -> pointer to ASCIZ default user name, immediately followed by
  8395.         ASCIZ password
  8396.     BL = adapter number to use for default login attempt
  8397.         FFh try all valid adapters
  8398.         00h-05h try adapter 0-5 explicitly
  8399. Return: CF clear if successful
  8400.     CF set on error
  8401.         AX = error code
  8402. Notes:    call with ES:DI -> two nulls to disable auto-login
  8403. SeeAlso: AX=5FB7h
  8404. --------N-215FB7-----------------------------
  8405. INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS
  8406.     AX = 5FB7h
  8407.     ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name
  8408. Return: CF clear if successful
  8409.         DL = adapter number used for default login attempt
  8410.         FFh all valid adapters will be tried
  8411.         00h-05h specified adapter will be tried explicitly
  8412.     CF set on error
  8413.         AX = error code
  8414. SeeAlso: AX=5F81h,AX=5FB6h
  8415. --------N-215FC0-----------------------------
  8416. INT 21 - LANtastic - GET TIME FROM SERVER
  8417.     AX = 5FC0h
  8418.     DS:SI -> time block (see below)
  8419.     ES:DI -> ASCIZ server name to get time from
  8420. Return: CF clear if successful
  8421.     CF set on error
  8422.         AX = error code
  8423. SeeAlso: AH=E7h
  8424.  
  8425. Format of time block:
  8426. Offset    Size    Description
  8427.  00h    WORD    year
  8428.  02h    BYTE    day
  8429.  03h    BYTE    month
  8430.  04h    BYTE    minutes
  8431.  05h    BYTE    hour
  8432.  06h    BYTE    hundredths of second
  8433.  07h    BYTE    second
  8434. --------N-215FC8-----------------------------
  8435. INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN
  8436.     AX = 5FC8h
  8437.     ES:DI -> ASCIZ server name in form "\\machine"
  8438.     DS:SI -> ASCIZ reason string (80 characters)
  8439.     CX = number of minutes until shutdown (0 = immediate)
  8440.     DX = option flags (see below)
  8441. Return: CF clear if successful
  8442.     CF set on error
  8443.         AX = error code
  8444. SeeAlso: AX=5FC9h
  8445.  
  8446. Bitfields for option flags:
  8447.  bit 0    auto reboot
  8448.  bit 1    do not notify users
  8449.  bit 2    halt after shutdown
  8450.  bit 3    shutdown due to power fail (used by UPS)
  8451.  bits 4-7    reserved
  8452.  bits 8-14    user definable
  8453.  bit 15 reserved
  8454. --------N-215FC9-----------------------------
  8455. INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN
  8456.     AX = 5FC9h
  8457.     ES:DI -> ASCIZ server name in form "\\machine"
  8458. Return: CF clear if successful
  8459.     CF set on error
  8460.         AX = error code
  8461. Note:    you must have the "S" privilege to use this call
  8462. SeeAlso: AX=5FC8h
  8463. --------N-215FCA-----------------------------
  8464. INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER
  8465.     AX = 5FCAh
  8466.     ES:DI -> ASCIZ server name in form "\\machine"
  8467.     DS:SI -> ASCIZ string to stuff (128 bytes)
  8468. Return: CF clear if successful
  8469.     CF set on error
  8470.         AX = error code
  8471. Note:    you must have the "S" privilege to use this call
  8472.     maximum number of characters that can be stuffed is determined by the
  8473.       server's RUN BUFFER SIZE.
  8474. SeeAlso: INT 16/AH=05h
  8475. --------N-215FCB-----------------------------
  8476. INT 21 - LANtastic v4.1+ - TERMINATE USER
  8477.     AX = 5FCBh
  8478.     ES:DI -> ASCIZ server name in form "\\machine"
  8479.     DS:SI -> blank-padded username.     A null char = wildcard.
  8480.     DS:DX -> blank-padded machine name.  A null char = wildcard.
  8481.     CX = minutes until termination (0 = immediate)
  8482. Return: CF clear if successful
  8483.     CF set on error
  8484.         AX = error code
  8485. Note:    you must have the "S" privilege to use this call
  8486.     you cannot log yourself out using this call
  8487. SeeAlso: AX=5F82h
  8488. --------N-215FCC-----------------------------
  8489. INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS
  8490.     AX = 5FCCh
  8491.     ES:DI -> ASCIZ server name in form "\\machine"
  8492.     CX = bit values (value of bits you want to set) (see below)
  8493.     DX = bit mask (bits you are interested in, 0 = get only) (see below)
  8494. Return: CF clear if successful
  8495.         CX = control bits after call
  8496.         bit 0: disable logins
  8497.     CF set on error
  8498.         AX = error code
  8499. Note:    you must have the "S" privilege to SET, anyone can GET.
  8500. --------N-215FCD-----------------------------
  8501. INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES
  8502.     AX = 5FCDh
  8503.     ES:DI -> ASCIZ server name in form "\\machine"
  8504. Return: CF clear if successful
  8505.     CF set on error
  8506.         AX = error code
  8507. Note:    you must have the "S" privilege to use this call.
  8508. --------N-215FD0-----------------------------
  8509. INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
  8510.     AX = 5FD0h
  8511. Return: CF clear if successful
  8512.         CX = redirected printer timeout in clock ticks of 55ms
  8513.         0000h if timeout disabled
  8514.     CF set on error
  8515.         AX = error code
  8516. SeeAlso: AX=5FD1h
  8517. --------N-215FD1-----------------------------
  8518. INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
  8519.     AX = 5FD1h
  8520.     CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
  8521. Return: CF clear if successful
  8522.     CF set on error
  8523.         AX = error code
  8524. SeeAlso: AX=5FD0h
  8525. --------N-215FE0-----------------------------
  8526. INT 21 C - LANtastic - GET DOS SERVICE VECTOR
  8527.     AX = 5FE0h
  8528. Return: CF clear if successful
  8529.         ES:BX -> current FAR service routine
  8530.     CF set on error
  8531.         AX = error code
  8532. Note:    the service routine is called by the LANtastic redirector whenever DOS
  8533.       may safely be called, permitting external TSRs and drivers to hook
  8534.       into LANtastic's DOS busy flag checking
  8535. SeeAlso: AX=5FE1h,INT 28,INT 2A/AH=84h
  8536. --------N-215FE1-----------------------------
  8537. INT 21 - LANtastic - SET DOS SERVICE VECTOR
  8538.     AX = 5FE1h
  8539.     ES:BX -> FAR routine to call when DOS services are available
  8540. Return: CF clear if successful
  8541.     CF set on error
  8542.         AX = error code
  8543. Note:    new handler must chain to previous handler as its first action
  8544. SeeAlso: AX=5FE0h
  8545. --------N-215FE2-----------------------------
  8546. INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
  8547.     AX = 5FE2h
  8548. Return: CF clear if successful
  8549.         ES:BX -> current FAR message service routine
  8550.     CF set on error
  8551.         AX = error code
  8552. SeeAlso: AX=5FE0h,AX=5FE3h
  8553. --------N-215FE3-----------------------------
  8554. INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
  8555.     AX = 5FE3h
  8556.     ES:BX -> FAR routine for processing network messages
  8557. Return: CF clear if successful
  8558.     CF set on error
  8559.         AX = error code
  8560. Notes:    handler must chain to previous handler as its first action
  8561.     on invocation, ES:BX -> just-received message
  8562. SeeAlso: AX=5FE2h
  8563. --------D-2160-------------------------------
  8564. INT 21 - DOS 3.0+ - "TRUENAME" - CANONICALIZE FILENAME OR PATH
  8565.     AH = 60h
  8566.     DS:SI -> ASCIZ filename or path
  8567.     ES:DI -> 128-byte buffer for canonicalized name
  8568. Return: CF set on error
  8569.         AX = error code
  8570.         02h invalid component in directory path or drive letter only
  8571.         03h malformed path or invalid drive letter
  8572.         ES:DI buffer unchanged
  8573.     CF clear if successful
  8574.         AH = 00h
  8575.         AL = destroyed (00h or 5Ch or last char of current dir on drive)
  8576.         buffer filled with qualified name of form D:\PATH\FILE.EXT or
  8577.           \\MACHINE\PATH\FILE.EXT
  8578. Desc:    determine the canonical name of the specified filename or path,
  8579.       corresponding to the undocumented TRUENAME command in COMMAND.COM
  8580. Notes:    the input path need not actually exist
  8581.     letters are uppercased, forward slashes converted to backslashes,
  8582.       asterisks converted to appropriate number of question marks, and
  8583.       file and directory names are truncated to 8.3 if necessary.  (DR-DOS
  8584.       3.41 and 5.0 do not expand asterisks)
  8585.     '.' and '..' in the path are resolved
  8586.     filespecs on local drives always start with "d:", those on network
  8587.       drives always start with "\\"
  8588.     if path string is on a JOINed drive, the returned name is the one that
  8589.       would be needed if the drive were not JOINed; similarly for a
  8590.       SUBSTed, ASSIGNed, or network drive letter.    Because of this, it is
  8591.       possible to get a qualified name that is not legal under the current
  8592.       combination of SUBSTs, ASSIGNs, JOINs, and network redirections
  8593.     under DOS 3.3 through 6.00, a device name is translated differently if
  8594.       the device name does not have an explicit directory or the directory
  8595.       is \DEV (relative directory DEV from the root directory works
  8596.       correctly).  In these cases, the returned string consists of the
  8597.       unchanged device name and extension appended to the string X:/
  8598.       (forward slash instead of backward slash as in all other cases) where
  8599.       X is the default or explicit drive letter.
  8600.     functions which take pathnames require canonical paths if invoked via
  8601.       INT 21/AX=5D00h
  8602.     supported by OS/2 v1.1 compatibility box
  8603.     NetWare 2.1x does not support characters with the high bit set; early
  8604.       versions of NetWare 386 support such characters except in this call.
  8605.       In addition, NetWare returns error code 3 for the path "X:\"; one
  8606.       should use "X:\." instead.
  8607.     for DOS 3.3-6.0, the input and output buffers may be the same, as the
  8608.       canonicalized name is built in an internal buffer and copied to the
  8609.       specified output buffer as the very last step
  8610.     for DR DOS 6.0, this function is not automatically called when on a
  8611.       network.  Device drivers reportedly cannot make this call from their
  8612.       INIT function.  Using the same pointer for both input and output
  8613.       buffers is not supported in the April 1992 and earlier versions of
  8614.       DR DOS
  8615. SeeAlso: AX=5FB3h,INT 2F/AX=1123h,INT 2F/AX=1221h
  8616. --------D-2161-------------------------------
  8617. INT 21 - DOS 3+ - UNUSED
  8618.     AH = 61h
  8619. Return: AL = 00h
  8620. Note:    this function does nothing and returns immediately
  8621. --------O-2161--BP6467-----------------------
  8622. INT 21 U - OS/2 v1.x FAPI - OS/2 FILE SYSTEM JOIN/SUBST
  8623.     AH = 61h
  8624.     BP = 6467h ("dg")
  8625.     AL = function
  8626.         00h list
  8627.         01h add
  8628.         02h delete
  8629.     BX = drive number
  8630.     CX = size of buffer
  8631.     SI = type (0002h JOIN, 0003h SUBST)
  8632.     ES:DI -> buffer
  8633. Return: ???
  8634. Notes:    used by JOIN and SUBST to communicate with the OS/2 file system
  8635.     also supported by OS/2 v2.0+ Virtual DOS Machines
  8636. --------D-2162-------------------------------
  8637. INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS
  8638.     AH = 62h
  8639. Return: BX = segment of PSP for current process
  8640. Notes:    under DOS 3+, this function does not use any of the DOS-internal stacks
  8641.       and may thus be called at any time, even during another INT 21h call
  8642.     the current PSP is not necessarily the caller's PSP
  8643.     identical to the undocumented AH=51h
  8644. SeeAlso: AH=50h,AH=51h
  8645. --------D-216300-----------------------------
  8646. INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS
  8647.     AX = 6300h
  8648. Return: CF clear if successful
  8649.         DS:SI -> lead byte table (see below)
  8650.     CF set on error
  8651.         AX = error code (01h) (see AH=59h)
  8652. Notes:    does not preserve any registers other than SS:SP
  8653.     the US version of MS-DOS 3.30 treats this as an unused function,
  8654.       setting AL=00h and returning immediately
  8655. SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh
  8656.  
  8657. Format of lead byte table entry:
  8658. Offset    Size    Description
  8659.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  8660.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  8661.     ...
  8662.   N   2 BYTEs    00h,00h end flag
  8663. --------D-216300-----------------------------
  8664. INT 21 - Far East DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE
  8665.     AX = 6300h
  8666. Return: AL = error code
  8667.         00h successful
  8668.         DS:SI -> DBCS table (see below)
  8669.         all other registers except CS:IP and SS:SP destroyed
  8670.         FFh not supported
  8671. Notes:    probably identical to AH=63h/AL=00h for DOS 2.25
  8672.     the US version of MS-DOS 3.30 treats this as an unused function,
  8673.       setting AL=00h and returning immediately
  8674.     the US version of DOS 4.0+ accepts this function, but returns an empty
  8675.       list
  8676. SeeAlso: AX=6300h"DOS 2.25"
  8677.  
  8678. Format of DBCS table:
  8679. Offset    Size    Description
  8680.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  8681.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  8682.     ...
  8683.   N   2 BYTEs    00h,00h end flag
  8684. --------D-216301-----------------------------
  8685. INT 21 - DOS 2.25, Far East DOS 3.2+ - SET KOREAN (HANGEUL) INPUT MODE
  8686.     AX = 6301h
  8687.     DL = new mode
  8688.         00h return only full characters on DOS keyboard input functions
  8689.         01h return partially-formed (interim) characters also
  8690. Return: AL = status
  8691.         00h successful
  8692.         FFh invalid mode
  8693. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6302h
  8694. --------D-216302-----------------------------
  8695. INT 21 - DOS 2.25, Far East DOS 3.2+ - GET KOREAN (HANGEUL) INPUT MODE
  8696.     AX = 6302h
  8697. Return: AL = status
  8698.         00h successful
  8699.         DL = current input mode
  8700.             00h return only full characters (clears interim flag)
  8701.             01h return partial characters (sets interim flag)
  8702.         FFh not supported
  8703. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6301h
  8704. --------D-2164-------------------------------
  8705. INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG
  8706.     AH = 64h
  8707.     AL = flag
  8708.         00h (default) call device driver function 5 (non-dest read)
  8709.             before INT 21/AH=01h,08h,0Ah
  8710.         nonzero don't call driver function 5
  8711. Return: nothing (MS-DOS)
  8712.     CF set, AX=error code??? (DR-DOS 5.0, which does not support this call)
  8713. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  8714.     under MS-DOS, this function does not use any of the DOS-internal stacks
  8715.       and may thus be called at any time, even during another DOS call
  8716. SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h
  8717. --------O-2164--DX0000-----------------------
  8718. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - ENABLE AUTOMATIC TITLE SWITCH
  8719.     AH = 64h
  8720.     DX = 0000h (function number)
  8721.     CX = 636Ch (magic value, "cl")
  8722.     BX = 0000h (indicates special request)
  8723. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8724.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8725. SeeAlso: AH=64h/BX=0001h,INT 21/AH=4Bh
  8726. --------O-2164--DX0001-----------------------
  8727. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - SET SESSION TITLE
  8728.     AH = 64h
  8729.     DX = 0001h (function number)
  8730.     CX = 636Ch (magic value, "cl")
  8731.     BX = 0000h (indicates special request)
  8732.     ES:DI -> new ASCIZ title (max 12 char) or "" to restore default title
  8733. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8734.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8735. SeeAlso: AH=64h/BX=0000h,AH=64h/BX=0002h,INT 15/AH=12h/BH=05h
  8736. --------O-2164--DX0002-----------------------
  8737. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - GET SESSION TITLE
  8738.     AH = 64h
  8739.     DX = 0002h (function number)
  8740.     CX = 636Ch (magic value, "cl")
  8741.     BX = 0000h (indicates special request)
  8742.     ES:DI -> 13-byte buffer for current title
  8743. Return: buffer filled (single 00h if title never changed)
  8744. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8745.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8746. SeeAlso: AH=64h/BX=0000h,AH=64h/BX=0001h,INT 15/AH=12h/BH=05h
  8747. --------O-2164--DX0003-----------------------
  8748. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET LASTDRIVE
  8749.     AH = 64h
  8750.     DX = 0003h (function number)
  8751.     CX = 636Ch (magic value, "cl")
  8752.     BX = 0000h (indicates special request)
  8753. Return: AL = highest drive supported
  8754. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8755.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8756.     used by WinOS2
  8757. --------O-2164--DX0004-----------------------
  8758. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SIZE OF PTDA JFT
  8759.     AH = 64h
  8760.     DX = 0004h (function number)
  8761.     CX = 636Ch (magic value, "cl")
  8762.     BX = 0000h (indicates special request)
  8763. Return: AX = number of entries in OS/2 JFT for VDM
  8764. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8765.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8766.     in an OS/2 VDM, the DOS Job File Table in the PSP contains an index
  8767.       into the OS/2 JFT in the Per-Task Data Area rather than an SFT index
  8768.       because the OS/2 SFT can contain more than 255 entries
  8769. --------O-2164--DX0005-----------------------
  8770. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SECOND SFT FLAGS WORD
  8771.     AH = 64h
  8772.     DX = 0005h (function number)
  8773.     CX = 636Ch (magic value, "cl")
  8774.     BX = 0000h (indicates special request)
  8775.     DI = DOS file handle
  8776. Return: AX = value of second flags word from OS/2 SFT entry for file
  8777. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8778.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8779.     the OS/2 SFT has two flags words rather than DOS's one word, and this
  8780.       function provides access to the word which is not present in DOS
  8781. --------O-2164--DX0006-----------------------
  8782. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - UNLOAD DOSKRNL SYMBOLS & LOAD PROGR
  8783.     AH = 64h
  8784.     DX = 0006h (function number)
  8785.     CX = 636Ch (magic value, "cl")
  8786.     BX = 0000h (indicates special request)
  8787.     ES:DI -> ASCIZ filespec
  8788.     DS = base address for loading
  8789. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8790.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8791.     this function is only supported by the kernel debugging version of
  8792.       OS2KRNL
  8793. --------O-2164--DX0007-----------------------
  8794. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET WinOS2 CALL GATE ADDRESS
  8795.     AH = 64h
  8796.     DX = 0007h (function number)
  8797.     CX = 636Ch (magic value, "cl")
  8798.     BX = 0000h (indicates special request)
  8799. Return: AX = call gate address
  8800. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8801.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8802.     used by WinOS2 to make direct calls to OS2KRNL, bypassing the overhead
  8803.       of DOSKRNL
  8804. --------O-2164--DX0008-----------------------
  8805. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET LOADING MESSAGE
  8806.     AH = 64h
  8807.     DX = 0008h (function number)
  8808.     CX = 636Ch (magic value, "cl")
  8809.     BX = 0000h (indicates special request)
  8810. Return: DS:DX -> '$'-terminated message "Loading.  Please wait."
  8811. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  8812.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  8813.     this function permits National Language Support for the initial message
  8814.       displayed while WinOS2 starts a full-screen session
  8815. --------O-2164--CX636C-----------------------
  8816. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API support
  8817.     AH = 64h
  8818.     CX = 636Ch ("cl")
  8819.     BX = API ordinal (see below)
  8820.     other registers as appropriate for API call
  8821.       if ordinal 0025h:
  8822.         DS:SI -> STARTDATA structure (see below)
  8823. Return: as appropriate for API call
  8824.       if ordinal 0025h:
  8825.         AX = return code
  8826.  
  8827. Values for API ordinal:
  8828.  0025h    DOS32StartSession
  8829.  0082h    DosGetCP
  8830.  00A7h    DosQFSAttach
  8831.  00BFh    DosEditName
  8832.  00CBh    DosForceDelete
  8833.  0144h    Dos32CreateEventSem
  8834.  0145h    Dos32OpenEvenSem
  8835.  0146h    Dos32CloseEventSem
  8836.  0147h    Dos32ResetEventSem
  8837.  0148h    Dos32PostEventSem
  8838.  0149h    Dos32WaitEventSem
  8839.  014Ah    Dos32QueryEventSem
  8840.  014Bh    Dos32CreateMutexSem
  8841.  014Ch    Dos32OpenMutexSem
  8842.  014Dh    Dos32CloseMutexSem
  8843.  014Eh    Dos32RequestMutexSem
  8844.  014Fh    Dos32ReleaseMutexSem
  8845.  0150h    Dos32QueryMutexSem
  8846.  0151h    Dos32CreateMuxWaitSem
  8847.  0152h    Dos32OpenMuxWaitSem
  8848.  0153h    Dos32CloseMuxWaitSem
  8849.  0154h    Dos32WaitMuxWaitSem
  8850.  0155h    Dos32AddMuxWaitSem
  8851.  0156h    Dos32DeleteMuxWaitSem
  8852.  0157h    Dos32QueryMuxWaitSem
  8853.  
  8854. Format of STARTDATA structure:
  8855. Offset    Size    Description
  8856.  00h    WORD    length of structure (must be 0018h,001Eh,0020h,0032h,or 003Ch)
  8857.  02h    WORD    relation of new process to caller (00h independent, 01h child)
  8858.  04h    WORD    fore/background (00h foreground, 01h background)
  8859.  06h    WORD    trace options (00h-02h, 00h = no trace)
  8860.  08h    DWORD    pointer to ASCIZ program title (max 62 chars) or 0000h:0000h
  8861.  0Ch    DWORD    pointer to ASCIZ program name (max 128 chars) or 0000h:0000h
  8862.  10h    DWORD    pointer to ASCIZ program args (max 144 chars) or 0000h:0000h
  8863.  14h    DWORD    "TermQ" (currently reserved, must be 00000000h)
  8864.  18h    DWORD    pointer to environment (max 486 bytes) or 0000h:0000h
  8865.  1Ch    WORD    inheritance (00h or 01h)
  8866.  1Eh    WORD    session type
  8867.         00h OS/2 session manager determines type (default)
  8868.         01h OS/2 full-screen
  8869.         02h OS/2 window
  8870.         03h PM
  8871.         04h VDM full-screen
  8872.         07h VDM window
  8873.  20h    DWORD    pointer to ASCIZ icon filename (max 128 chars) or 0000h:0000h
  8874.  24h    DWORD    "PgmHandle" (currently reserved, must be 00000000h)
  8875.  28h    WORD    "PgmControl"
  8876.  2Ah    WORD    initial column
  8877.  2Ch    WORD    initial row
  8878.  2Eh    WORD    initial width
  8879.  30h    WORD    initial height
  8880.  32h    WORD    reserved (0)
  8881.  34h    DWORD    "ObjectBuffer" (currently reserved, must be 00000000h)
  8882.  38h    DWORD    "ObjectBufferLen" (currently reserved, must be 00000000h)
  8883. --------D-2165-------------------------------
  8884. INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
  8885.     AH = 65h
  8886.     AL = info ID
  8887.         01h get general internationalization info
  8888.         02h get pointer to uppercase table
  8889.         04h get pointer to filename uppercase table
  8890.         05h get pointer to filename terminator table
  8891.         06h get pointer to collating sequence table
  8892.         07h (DOS 4+) get pointer to Double-Byte Character Set table
  8893.     BX = code page (FFFFh=global code page)
  8894.     DX = country ID (FFFFh=current country)
  8895.     ES:DI -> country information buffer (see below)
  8896.     CX = size of buffer (>= 5)
  8897. Return: CF set on error
  8898.         AX = error code (see AH=59h)
  8899.     CF clear if successful
  8900.         CX = size of country information returned
  8901.         ES:DI -> country information
  8902. Notes:    AL=05h appears to return same info for all countries and codepages; it
  8903.       has been documented for DOS 5+, but was undocumented in ealier
  8904.       versions
  8905.     NLSFUNC must be installed to get info for countries other than the
  8906.       default
  8907.     subfunctions 02h and 04h are identical under OS/2
  8908. SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h,INT 2F/AX=14FEh
  8909.  
  8910. Format of country information:
  8911. Offset    Size    Description
  8912.  00h    BYTE    info ID
  8913. ---if info ID = 01h---
  8914.  01h    WORD    size
  8915.  03h    WORD    country ID
  8916.  05h    WORD    code page
  8917.  07h 34 BYTEs    country-dependent info (see AH=38h)
  8918. ---if info ID = 02h---
  8919.  01h    DWORD    pointer to uppercase table (see below)
  8920. ---if info ID = 04h---
  8921.  01h    DWORD    pointer to filename uppercase table (see below)
  8922. ---if info ID = 05h---
  8923.  01h    DWORD    pointer to filename character table (see below)
  8924. ---if info ID = 06h---
  8925.  01h    DWORD    pointer to collating table (see below)
  8926. ---if info ID = 07h (DOS 4+)---
  8927.  01h    DWORD    pointer to DBCS lead byte table (see below)
  8928.  
  8929. Format of uppercase table:
  8930. Offset    Size    Description
  8931.  00h    WORD    table size
  8932.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  8933.  
  8934. Format of collating table:
  8935. Offset    Size    Description
  8936.  00h    WORD    table size
  8937.  02h 256 BYTEs    values used to sort characters 00h to FFh
  8938.  
  8939. Format of filename terminator table:
  8940. Offset    Size    Description
  8941.  00h    WORD    table size (not counting this word)
  8942.  02h    BYTE    ??? (01h for MS-DOS 3.30-6.00)
  8943.  03h    BYTE    lowest permissible character value for filename
  8944.  04h    BYTE    highest permissible character value for filename
  8945.  05h    BYTE    ??? (00h for MS-DOS 3.30-6.00)
  8946.  06h    BYTE    first excluded character in range \ all characters in this
  8947.  07h    BYTE    last excluded character in range  / range are illegal
  8948.  08h    BYTE    ??? (02h for MS-DOS 3.30-6.00)
  8949.  09h    BYTE    number of illegal (terminator) characters
  8950.  0Ah  N BYTEs    characters which terminate a filename:    ."/\[]:|<>+=;,
  8951. Note:    partially documented for DOS 5+, but undocumented for earlier versions
  8952.  
  8953. Format of filename uppercase table:
  8954. Offset    Size    Description
  8955.  00h    WORD    table size
  8956.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  8957.  
  8958. Format of DBCS lead byte table:
  8959. Offset    Size    Description
  8960.  00h    WORD    length
  8961.  02h 2N BYTEs    start/end for N lead byte ranges
  8962.     WORD    0000h    (end of table)
  8963. --------D-2165-------------------------------
  8964. INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
  8965.     AH = 65h
  8966.     AL = function
  8967.         20h capitalize character
  8968.         DL = character to capitalize
  8969.         Return: DL = capitalized character
  8970.         21h capitalize string
  8971.         DS:DX -> string to capitalize
  8972.         CX = length of string
  8973.         22h capitalize ASCIZ string
  8974.         DS:DX -> ASCIZ string to capitalize
  8975. Return: CF set on error
  8976.         AX = error code (see AH=59h)
  8977.     CF clear if successful
  8978. Note:    these calls have been documented for DOS 5+, but were undocumented in
  8979.       DOS 4.x.
  8980. --------D-216523-----------------------------
  8981. INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
  8982.     AX = 6523h
  8983.     DL = character
  8984.     DH = second character of double-byte character (if applicable)
  8985. Return: CF set on error
  8986.     CF clear if successful
  8987.         AX = type
  8988.         00h no
  8989.         01h yes
  8990.         02h neither yes nor no
  8991. --------D-2165-------------------------------
  8992. INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
  8993.     AH = 65h
  8994.     AL = function
  8995.         A0h capitalize filename character
  8996.         DL = character to capitalize
  8997.         Return: DL = capitalized character
  8998.         A1h capitalize counted filename string
  8999.         DS:DX -> filename string to capitalize
  9000.         CX = length of string
  9001.         A2h capitalize ASCIZ filename
  9002.         DS:DX -> ASCIZ filename to capitalize
  9003. Return: CF set on error
  9004.         AX = error code (see AH=59h)
  9005.     CF clear if successful
  9006. Note:    nonfunctional in DOS 4.00 through 6.00 due to a bug (the code sets a
  9007.       pointer depending on the high bit of AL, but doesn't clear the
  9008.       bit before branching by function number).
  9009. --------D-216601-----------------------------
  9010. INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
  9011.     AX = 6601h
  9012. Return: CF set on error
  9013.         AX = error code (see AH=59h)
  9014.     CF clear if successful
  9015.         BX = active code page (see AX=6602h)
  9016.         DX = system code page
  9017. SeeAlso: AX=6602h
  9018. --------D-216602-----------------------------
  9019. INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
  9020.     AX = 6602h
  9021.     BX = active code page (see below)
  9022.     DX = system code page (active page at boot time)
  9023. Return: CF set on error
  9024.         AX = error code (see AH=59h)
  9025.     CF clear if successful
  9026. SeeAlso: AX=6601h,INT 2F/AX=14FFh
  9027.  
  9028. Values for code page:
  9029.  437    US
  9030.  850    Multilingual
  9031.  852    Slavic/Latin II (DOS 5+)
  9032.  857    Turkish
  9033.  860    Portugal
  9034.  861    Iceland
  9035.  863    Canada (French)
  9036.  865    Norway/Denmark
  9037. --------D-2167-------------------------------
  9038. INT 21 - DOS 3.3+ - SET HANDLE COUNT
  9039.     AH = 67h
  9040.     BX = size of new file handle table for process
  9041. Return: CF clear if successful
  9042.     CF set on error
  9043.         AX = error code (see AH=59h)
  9044. Desc:    adjust the size of the per-process open file table, thus raising or
  9045.       lowering the limit on the number of files the caller can open
  9046.       simultaneously
  9047. Notes:    if BX <= 20, no action is taken if the handle limit has not yet been
  9048.       increased, and the table is copied back into the PSP if the limit
  9049.       is currently > 20 handles
  9050.     for file handle tables of > 20 handles, DOS 3.30 never reuses the
  9051.       same memory block, even if the limit is being reduced; this can lead
  9052.       to memory fragmentation as a new block is allocated and the existing
  9053.       one freed
  9054.     only the first 20 handles are copied to child processes in DOS 3.3-6.0
  9055.     increasing the file handles here will not, in general, increase the
  9056.       number of files that can be opened using the runtime library of a
  9057.       high-level language such as C
  9058. BUGS:    the original release of DOS 3.30 allocates a full 64K for the handle
  9059.       table on requests for an even number of handles
  9060.     DR-DOS 3.41 and 5.0 will lose track of any open file handles beyond
  9061.       the portion of the JFT retained after the call; MS-DOS will indicate
  9062.       error 04h if any of the JFT entries to be removed are open
  9063. SeeAlso: AH=26h,AH=86h
  9064. --------D-2168-------------------------------
  9065. INT 21 - DOS 3.3+ - "FFLUSH" - COMMIT FILE
  9066.     AH = 68h
  9067.     BX = file handle
  9068. Return: CF clear if successful
  9069.         all data still in DOS disk buffers is written to disk immediately,
  9070.           and the file's directory entry is updated
  9071.     CF set on error
  9072.         AX = error code (see AH=59h)
  9073. SeeAlso: AX=5D01h,AH=6Ah,INT 2F/AX=1107h
  9074. --------D-2169-------------------------------
  9075. INT 21 U - DOS 4+ internal - GET/SET DISK SERIAL NUMBER
  9076.     AH = 69h
  9077.     AL = subfunction
  9078.         00h get serial number
  9079.         01h set serial number
  9080.     BL = drive (0=default, 1=A, 2=B, etc)
  9081.     DS:DX -> disk info (see below)
  9082. Return: CF set on error
  9083.         AX = error code (see AH=59h)
  9084.     CF clear if successful
  9085.         AX destroyed
  9086.         (AL = 00h) buffer filled with appropriate values from extended BPB
  9087.         (AL = 01h) extended BPB on disk set to values from buffer
  9088. Notes:    does not generate a critical error; all errors are returned in AX
  9089.     error 0005h given if no extended BPB on disk
  9090.     does not work on network drives (error 0001h)
  9091.     buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
  9092.       extended BPB on disk
  9093.     this function is supported under Novell NetWare versions 2.0A through
  9094.       3.11; the returned serial number is the one a DIR would display,
  9095.       the volume label is the NetWare volume label, and the file system
  9096.       is set to "FAT16".
  9097.     the serial number is computed from the current date and time when the
  9098.       disk is created; the first part is the sum of the seconds/hundredths
  9099.       and month/day, the second part is the sum of the hours/minutes and
  9100.       year
  9101.     the volume label which is read or set is the one stored in the extended
  9102.       BPB on disks formatted with DOS 4.0+, rather than the special root
  9103.       directory entry used by the DIR command in COMMAND.COM (use AH=11h
  9104.       to find that volume label)
  9105. SeeAlso: AX=440Dh
  9106.  
  9107. Format of disk info:
  9108. Offset    Size    Description
  9109.  00h    WORD    info level (zero)
  9110.  02h    DWORD    disk serial number (binary)
  9111.  06h 11 BYTEs    volume label or "NO NAME    " if none present
  9112.  11h  8 BYTEs    (AL=00h only) filesystem type--string "FAT12   " or "FAT16   "
  9113. --------O-2169-------------------------------
  9114. INT 21 - DR-DOS 5.0 - NULL FUNCTION
  9115.     AH = 69h
  9116. Return: AL = 00h
  9117. SeeAlso: AH=18h
  9118. --------v-216969-----------------------------
  9119. INT 21 - VIRUS - "Rape-747" - INSTALLATION CHECK
  9120.     AX = 6969h
  9121. Return: AX = 0666h if resident
  9122. SeeAlso: AX=58CCh,AH=76h"VIRUS"
  9123. --------d-2169FFDX0000-----------------------
  9124. INT 21 U - CUBIT v4.00 - GET CUBIT INT 21 HANDLER
  9125.     AX = 69FFh
  9126.     DX = 0000h
  9127.     BX = CB00h (magic value)
  9128. Return: ES:BX -> CUBITR.EXE handler for INT 21
  9129. Note:    the installation check consists of testing that the first eight bytes
  9130.       at the returned interrupt handler are EBh 07h "CUBITR" (a short
  9131.       jump around the signature followed by the signature); the byte
  9132.       following the signature (i.e. ES:[BX+8]) indicates whether CUBITR
  9133.       is active (01h) or disabled (00h)
  9134. SeeAlso: AX=69FFh/DX=CFBFh
  9135. Index:    installation check;CUBIT
  9136. --------d-2169FFDXCFBF-----------------------
  9137. INT 21 U - CUBIT v4.00 - UNINSTALL
  9138.     AX = 69FFh
  9139.     DX = CFBFh
  9140.     CX = EFCFh
  9141.     BX = CB00h (magic value)
  9142. Return: ES:BX -> CUBITR.EXE handler for INT 21
  9143.     CX = status
  9144.         2020h successful
  9145.         2222h failed
  9146. Note:    if DX is neither 0000h nor CFBFh on entry, some other code is executed
  9147. SeeAlso: AX=69FFh/DX=0000h
  9148. --------D-216A-------------------------------
  9149. INT 21 U - DOS 4+ - COMMIT FILE
  9150.     AH = 6Ah
  9151.     BX = file handle
  9152. Return: CF clear if successful
  9153.         AH = 68h
  9154.     CF set on error
  9155.         AX = error code (06h) (see AH=59h)
  9156. Note:    identical to AH=68h in DOS 5.0-6.0; not known whether this is the case
  9157.       in DOS 4.x
  9158. SeeAlso: AH=68h
  9159. --------D-216B-------------------------------
  9160. INT 21 U - DOS 4.0 internal - IFS IOCTL
  9161.     AH = 6Bh
  9162.     AL = subfunction
  9163.         00h ???
  9164.         DS:SI -> Current Directory Structure???
  9165.         CL = drive (1=A:)
  9166.         01h ???
  9167.         DS:SI -> ???
  9168.         CL = file handle???
  9169.         02h ???
  9170.         DS:SI -> Current Directory Structure???
  9171.         DI = ???
  9172.         CX = drive (1=A:)
  9173. Return: CF set on error
  9174.         AX = error code (see INT 21/AH=59h)
  9175.     CF clear if successful
  9176. Note:    passed through to INT 2F/AX=112Fh with AX on top of stack
  9177. SeeAlso: AH=6Bh"DOS 5",INT 2F/AX=112Fh
  9178. --------D-216B-------------------------------
  9179. INT 21 U - DOS 5+ - NULL FUNCTION
  9180.     AH = 6Bh
  9181. Return: AL = 00h
  9182. Note:    this function does nothing and returns immediately
  9183. SeeAlso: AH=6Bh"DOS 4"
  9184. --------D-216C00-----------------------------
  9185. INT 21 - DOS 4+ - EXTENDED OPEN/CREATE
  9186.     AX = 6C00h
  9187.     BL = open mode as in AL for normal open (see INT 21/AH=3Dh)
  9188.         bit 7: inheritance
  9189.         bits 4-6: sharing mode
  9190.         bit 3 reserved
  9191.         bits 0-2: access mode
  9192.     BH = flags
  9193.         bit 6 = auto commit on every write (see also AH=68h)
  9194.         bit 5 = return error rather than doing INT 24h
  9195.     CX = create attribute
  9196.         bits 6-15 reserved
  9197.         bit 5: archive
  9198.         bit 4: reserved
  9199.         bit 3: volume label
  9200.         bit 2: system
  9201.         bit 1: hidden
  9202.         bit 0: readonly
  9203.     DL = action if file exists/does not exist
  9204.         bits 7-4 action if file does not exist
  9205.             0000 fail
  9206.             0001 create
  9207.         bits 3-0 action if file exists
  9208.             0000 fail
  9209.             0001 open
  9210.             0010 replace/open
  9211.     DH = 00h (reserved)
  9212.     DS:SI -> ASCIZ file name
  9213. Return: CF set on error
  9214.        AX = error code (see AH=59h)
  9215.     CF clear if successful
  9216.        AX = file handle
  9217.        CX = status
  9218.         1 file opened
  9219.         2 file created
  9220.         3 file replaced
  9221. Note:    the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility,
  9222.       and DL=12h
  9223. SeeAlso: AH=3Ch,AH=3Dh,AX=6C01h,AH=71h
  9224. --------O-216C01-----------------------------
  9225. INT 21 U - OS/2 v2.0 - "DosOpen2"
  9226.     AX = 6C01h
  9227.     ???
  9228. Return: ???
  9229. Note:    this function is similar to AX=6C00h, but supports OS/2's extended
  9230.       attributes
  9231. SeeAlso: AX=5704h,AX=6C00h,AH=6Fh"OS/2"
  9232. --------D-216D-------------------------------
  9233. INT 21 U - DOS 5+ ROM - FIND FIRST ROM PROGRAM
  9234.     AH = 6Dh
  9235.     DS:DX -> ASCIZ program name
  9236. Return: CF clear if found
  9237.         [DTA] = ASCIZ name found
  9238.     CF set if not found
  9239. SeeAlso: AH=6Eh,AH=6Fh
  9240. --------O-216D-------------------------------
  9241. INT 21 U - OS/2 v1.x FAPI - "DosMkDir2"
  9242.     AH = 6Dh
  9243.     ???
  9244. Return: ???
  9245. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  9246. SeeAlso: AH=39h
  9247. --------D-216E-------------------------------
  9248. INT 21 U - DOS 5+ ROM - FIND NEXT ROM PROGRAM
  9249.     AH = 6Eh
  9250.     [DTA] = result of previous FindFirst ROM
  9251. Return: CF clear if found
  9252.         [DTA] = ASCIZ name found
  9253.     CF set if not found
  9254. SeeAlso: AH=6Dh
  9255. --------O-216E-------------------------------
  9256. INT 21 U - OS/2 v1.x FAPI - "DosENumAttrib"
  9257.     AH = 6Eh
  9258.     ???
  9259. Return: ???
  9260. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  9261. SeeAlso: AX=5703h,AH=6Fh"OS/2",INT 2F/AX=112Dh
  9262. --------O-216F-------------------------------
  9263. INT 21 U - OS/2 v1.x FAPI - "DosQMaxEASize" - GET MAXIMUM SIZE OF EXTENDED ATTR
  9264.     AH = 6Fh
  9265.     ???
  9266. Return: ???
  9267. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  9268. SeeAlso: AX=5703h,AX=6C01h,AH=6Eh"OS/2"
  9269. --------D-216F00-----------------------------
  9270. INT 21 U - DOS 5+ ROM - GET ROM SCAN START ADDRESS
  9271.     AX = 6F00h
  9272. Return: BX = current ROM scan starting segment
  9273. SeeAlso: AH=6Dh,AX=6F01h,AX=6F02h
  9274. --------D-216F01-----------------------------
  9275. INT 21 U - DOS 5+ ROM - SET ROM SCAN START ADDRESS
  9276.     AX = 6F01h
  9277.     BX = new ROM scan starting address
  9278. SeeAlso: AX=6F00h,AX=6F03h
  9279. --------D-216F02-----------------------------
  9280. INT 21 U - DOS 5+ ROM - GET EXCLUSION REGION LIST
  9281.     AX = 6F02h
  9282.     ES:BX -> buffer for exclusion region list (see below)
  9283. Return: ES:BX = 0000h:0000h on error, unchanged if buffer filled
  9284. SeeAlso: AX=6F00h,AX=6F03h
  9285.  
  9286. Format of exclusion region list:
  9287. Offset    Size    Description
  9288.  00h    WORD    number of entries
  9289.  02h 2N WORDs    start/end segments of N excluded regions
  9290. --------D-216F03-----------------------------
  9291. INT 21 U - DOS 5+ ROM - SET EXCLUSION REGION LIST
  9292.     AX = 6F03h
  9293.     DS:DX -> new exclusion region list (see AX=6F02h)
  9294. Note:    DOS saves only the pointer and assumes that the contents of the list
  9295.       are never changed, and that regions do not overlap
  9296. SeeAlso: AX=6F01h,AX=6F02h
  9297. ----------217070BX6060-----------------------
  9298. INT 21 - PCW Weather Card interface - GET DATA SEGMENT
  9299.     AX = 7070h
  9300.     BX = 6060h
  9301.     CX = 7070h
  9302.     DX = 7070h
  9303.     SI = 7070h
  9304.     DI = 7070h
  9305. Return: AX = segment of data structure
  9306. Notes:    the data structure is at offset 516 from this segment.
  9307.     the update byte is at offset 514 from this segment.  Updates are
  9308.       once per second while this byte is nonzero and it is decremented
  9309.       once per second.  While this byte is 0 updates are once per minute.
  9310. SeeAlso: AX=7070h/BX=7070h
  9311.  
  9312. Format of data structure:
  9313. Offset    Type    Description
  9314.  00h    WORD    hour
  9315.  02h    WORD    minute
  9316.  04h    WORD    second
  9317.  06h    WORD    day
  9318.  08h    WORD    month
  9319.  0Ah    WORD    year
  9320.  0Ch    WORD    ???
  9321.  0Eh    WORD    relative barometric pressure (in 1/100 inches)
  9322.  10h    WORD    ???
  9323.  12h    WORD    ???
  9324.  14h    WORD    temperature 1 (in 1/10 degrees F)
  9325.  16h    WORD    temperature 1 lowest (in 1/10 degrees F)
  9326.  18h    WORD    temperature 1 highest (in 1/10 degrees F)
  9327.  1Ah    WORD    temperature 2 (in 1/10 degrees F)
  9328.  1Ch    WORD    temperature 2 lowest (in 1/10 degrees F)
  9329.  1Eh    WORD    temperature 2 highest (in 1/10 degrees F)
  9330.  20h    WORD    wind speed (in MPH)
  9331.  22h    WORD    average of 60 wind speed samples (in MPH)
  9332.  24h    WORD    highest wind speed (in MPH)
  9333.  26h    WORD    wind chill factor  (in 1/10 degrees F)
  9334.  28h    WORD    lowest wind chill factor (in 1/10 degrees F)
  9335.  2Ah    WORD    ???
  9336.  2Ch    WORD    wind direction (in degrees)
  9337.  2Eh    WORD    accumulated daily rainfall (in 1/10 inches)
  9338.  30h    WORD    accumulated annual rainfall (in 1/10 inches)
  9339. ----------217070BX7070-----------------------
  9340. INT 21 - PCW Weather Card interface - INSTALLATION CHECK
  9341.     AX = 7070h
  9342.     BX = 7070h
  9343.     CX = 7070h
  9344.     DX = 7070h
  9345.     SI = 7070h
  9346.     DI = 7070h
  9347. Return: AX = 0070h
  9348.     BX = 0070h
  9349.     CX = 0070h
  9350.     DX = 0070h
  9351.     SI = 0070h
  9352.     DI = 0070h
  9353. SeeAlso: AX=7070h/BX=6060h,AX=8080h
  9354. --------D-2171-------------------------------
  9355. INT 21 - DOS 7 (Chicago) - LONG FILENAME FUNCTIONS
  9356.     AH = 71h
  9357.     AL = function
  9358.         39h create directory
  9359.         3Ah remove directory
  9360.         3Bh set current directory
  9361.         41h delete file
  9362.         43h get file attributes (BL=00h), set file attributes (BL=01h)
  9363.         47h get current directory
  9364.         4Eh find first file
  9365.         4Fh find next file
  9366.         56h move (rename) file
  9367.         6Ch create/open file
  9368. Return: CF set on error
  9369.         AX = error code
  9370.         7100h if function not supported
  9371.     CF clear if successful
  9372.         other registers as for corresponding "old" DOS function
  9373. Notes:    if error 7100h is returned, the old-style function should be called
  9374.     AX=714Eh returns a "search handle" which must be passed to AX=714Fh;
  9375.       when the search is complete, AH=72h must be called to terminate
  9376.       the search
  9377. SeeAlso: AH=39h,AH=3Ah,AH=3Bh,AH=41h,AH=43h,AH=47h,AH=4Eh,AH=4Fh,AH=56h,AH=6Ch
  9378. SeeAlso: AH=72h
  9379. --------D-2172-------------------------------
  9380. INT 21 - DOS 7 (Chicago) - "FindClose" - TERMINATE DIRECTORY SEARCH
  9381.     AH = 72h
  9382.     details not yet available
  9383. Note:    this function must be called after starting a search with AX=714Eh,
  9384.       to indicate that the search handle returned by that function will
  9385.       no longer be used
  9386. SeeAlso: AH=4Eh,AH=71h
  9387. --------v-2176-------------------------------
  9388. INT 21 - VIRUS - "Klaeren"/"Hate" - INSTALLATION CHECK
  9389.     AH = 76h
  9390. Return: AL = 48h if resident
  9391. SeeAlso: AX=6969h,AX=7700h"VIRUS"
  9392. --------v-217700-----------------------------
  9393. INT 21 - VIRUS - "Growing Block" - INSTALLATION CHECK
  9394.     AX = 7700h
  9395. Return: AX = 0920h if resident
  9396. SeeAlso: AH=76h,AH=7Fh
  9397. --------V-217734-----------------------------
  9398. INT 21 U - SCROLLit v1.7 - INSTALLATION CHECK
  9399.     AX = 7734h
  9400. Return: DX = 3477h if installed
  9401.         AX = segment of resident code
  9402. Program: ScrollIt is a shareware backscroll utility by Bromfield Software
  9403.       Products
  9404. --------U-217761-----------------------------
  9405. INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK
  9406.     AX = 7761h ('wa')
  9407. Return: AX = 6177h
  9408. Note:    WATCH.COM is part of the "TSR" package by TurboPower Software
  9409. SeeAlso: INT 16/AX=7761h
  9410. --------v-217F-------------------------------
  9411. INT 21 - VIRUS - "Squeaker" - INSTALLATION CHECK
  9412.     AH = 7Fh
  9413. Return: AH = 80h if resident
  9414. SeeAlso: AX=7700h,AH=83h"VIRUS"
  9415. --------!------------------------------------
  9416.